搜尋
首頁資料庫mysql教程关于事务开启与否对数据库插入数据所需时间的影响的讨论

根据sqlite3的api,在后面测试的时候发现对于sqlite3来说事务的开启与否仅插入1w条数据,时间的差距就已经非常非常明显了,先说下

最近在做sqlite3的二次开发,看到API里面关于事务的时候,萌生了测试一下事务的开启与否对插入数据所需要的时间影响的想法,根据sqlite3的api,,在后面测试的时候发现对于sqlite3来说事务的开启与否仅插入1w条数据,时间的差距就已经非常非常明显了,先说下测试环境:Ubuntu 12.04, sqlite3 3.7.14.1,测试插入1w条数据。
   
    不开启事务时的测试代码如下:
   
    int insert_no_trans()
    {
   
    printf(" \n"
            "go into function insert_no_trans()\n");
 
    int j = 0;
    for (j = 0; j     {
        sprintf(sql, "INSERT INTO [dev] ([id], [name], [age])\
                values (%d, '%s', %d)", j, "JGood", j);
        if(SQLITE_OK != sqlite3_exec
                (conn, sql, 0, 0, &err_msg))
        {
            fprintf(stderr, "INSERT ERROR: %s\n", err_msg);
            exit(EXIT_FAILURE);
        }
       
    }
    printf("INSERT all succussfully!\n");
 
    printf("function insert_no_trans() end. \n"
            " \n");
 
    return EXIT_SUCCESS;
    }
   
   
    开启事务的测试代码如下:
    int insert_with_trans()
    {
   
    printf(" \n"
            "go into function insert_with_trans()\n");
 
    sqlite3_exec(conn, "begin;", 0, 0, 0);  //开启事务
 
    int j = 0;
    for (j = 0; j     {
        sprintf(sql, "INSERT INTO [dev] ([id], [name], [age])\
                values (%d, '%s', %d)", j, "JGood", j);
        if(SQLITE_OK != sqlite3_exec(conn, sql, 0, 0, &err_msg))
        {
            is_succeed = false; //失败之后把标识设为false
            fprintf(stderr, "INSERT ERROR: %s\n", err_msg);
            break;
        }
       
    }
 
    if(is_succeed)
        sqlite3_exec(conn, "commit;", 0, 0, 0); //提交事务
    else
    {
        sqlite3_exec(conn, "rollback;", 0, 0, 0); //回滚事务
        exit(EXIT_FAILURE);
    }
 
    printf("INSERT all succussfully!\n");
 
    printf("function insert_with_trans() end. \n"
            " \n");
 
    return EXIT_SUCCESS;
    }
 
    测试结果大跌眼镜,时间测试我用的是linux的time命令,在开启了事务的情况下插入1w条数据的时间仅为0.4s,而在不开启事务的情况下,由于时间太长,没有等其执行完,根据.db文件的大小和已经使用的时间推测,假设单位时间插入同样多条数据,推算出来的时间高达18分钟。这已经不在一个数量级了,google了一下这个问题,看到网上有人对此是这么解释的,如果未启用事务,sqlite会每插入一条数据,就往磁盘上面写一次,在整个执行过程中我也观察到未开启事务时程序执行期间硬盘灯一直是亮的,这也映证了这一点。而在开启事务的情况下,其应该是在对数据全部处理完之后才需要执行一次IO操作,时间自然非常快。

linux

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何在Phalcon框架中使用数据库事务(Transactions)如何在Phalcon框架中使用数据库事务(Transactions)Jul 28, 2023 pm 07:25 PM

如何在Phalcon框架中使用数据库事务(Transactions)引言:数据库事务是一种重要的机制,可以确保数据库操作的原子性和一致性。在使用Phalcon框架进行开发时,我们也经常需要使用数据库事务来处理一系列相关的数据库操作。本文将介绍如何在Phalcon框架中使用数据库事务,并提供相关的代码示例。一、什么是数据库事务(Transactions)?数据

使用PHP进行数据库事务处理的最佳实践使用PHP进行数据库事务处理的最佳实践Jun 07, 2023 am 08:00 AM

在Web开发中,数据库事务处理是一个重要的问题。当程序需要操作多个数据库表格时,保证数据一致性和完整性变得尤为重要。事务处理提供了一种方法来保证这些操作要么全部成功,要么全部失败。PHP作为一门流行的Web开发语言,也提供了事务处理的功能。本文将介绍使用PHP进行数据库事务处理的最佳实践。什么是数据库事务?在数据库中,事务是指一系列操作作为一个整体来执行的过

C#开发中如何处理数据库事务问题C#开发中如何处理数据库事务问题Oct 09, 2023 am 11:25 AM

C#开发中如何处理数据库事务问题,需要具体代码示例引言:在C#开发中,数据库事务的处理是非常重要的一项技术。通过事务的处理,我们可以确保数据库操作的一致性和完整性,提高系统的稳定性和安全性。本文将介绍C#中如何处理数据库事务问题,并给出具体的代码示例。一、数据库事务简介数据库事务是对数据库操作的一个逻辑单元,它可以由一个或多个操作组成。事务具有四个基本属性,

如何解决Java后端功能开发中的数据库事务问题?如何解决Java后端功能开发中的数据库事务问题?Aug 04, 2023 pm 07:45 PM

如何解决Java后端功能开发中的数据库事务问题?在Java后端功能开发中,涉及到数据库操作的功能很常见。而在数据库操作中,事务是一项非常重要的概念。事务是指由一系列数据库操作组成的逻辑单元,它要么完全执行,要么完全不执行。在实际应用中,我们经常需要确保一组相关的数据库操作要么全部成功执行,要么全部回滚,以保持数据的一致性和可靠性。那么,如何在Java后端开发

Java开发技巧大揭秘:优化数据库事务处理效率Java开发技巧大揭秘:优化数据库事务处理效率Nov 20, 2023 pm 03:13 PM

随着互联网的快速发展,数据库的重要性日益凸显。作为一名Java开发者,我们经常会涉及到数据库操作,数据库事务处理的效率直接关系到整个系统的性能和稳定性。本文将介绍一些Java开发中常用的优化数据库事务处理效率的技巧,帮助开发者提高系统的性能和响应速度。批量插入/更新操作通常情况下,一次向数据库中插入或更新单条记录的效率远低于批量操作。因此,在进行批量插入/更

Java开发:如何使用JPA进行数据库事务管理Java开发:如何使用JPA进行数据库事务管理Sep 21, 2023 pm 04:46 PM

Java开发:如何使用JPA进行数据库事务管理在Java开发中,数据库事务管理是一个非常重要且常见的需求。JPA(JavaPersistenceAPI)是JavaEE的一部分,它提供了一种方便的方式来进行数据库操作。本文将介绍如何使用JPA进行数据库事务管理,并提供具体的代码示例。首先,我们需要在项目中引入JPA相关的依赖。常见的JPA实现有Hibern

数据库事务隔离级别:PHP编程中的应用数据库事务隔离级别:PHP编程中的应用Jun 22, 2023 pm 07:22 PM

在PHP编程中,数据库事务隔离级别是一个重要的概念。事务是数据库管理和运行的基本单位,使得数据库可以在一致性和完整性的基础上进行有效且安全的操作。而事务隔离级别则是指多个事务间的相互影响程度。在PHP编程中,了解数据库事务隔离级别的概念和对应的应用是必不可少的。在数据库中,有四种事务隔离级别:未提交读(Readuncommitted)、已提交读(Read

Redis在Golang开发中的应用:如何处理数据库事务Redis在Golang开发中的应用:如何处理数据库事务Jul 30, 2023 pm 04:18 PM

Redis在Golang开发中的应用:如何处理数据库事务引言:在Golang开发中,Redis作为一种高性能缓存和数据存储数据库,被广泛应用于各种场景,特别是在处理数据库事务方面。本文将介绍Redis在Golang开发中如何处理数据库事务,并提供相关的代码示例。一、什么是事务事务是指一系列数据库操作(读取或写入),这些操作要么全部成功执行,要么全部失败回滚,

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境