我想優化我的SQLite3插入,因爲我正在處理一些大型數據集。Python SQLite3 - 它是否在每個插入語句上開始,結束事務?
我想知道的是,如果.execute(「INSERT ...」)語句爲每個執行語句開始並結束一個事務?或者它只是在第一次執行時執行一個BEGIN,並等待執行.commit()操作,因此我可以執行10,000個.execute命令,然後執行.commit(),因此我只做了一個事務?
我並不十分清楚故事的這一面,我真的很感謝這方面的任何投入。
我想優化我的SQLite3插入,因爲我正在處理一些大型數據集。Python SQLite3 - 它是否在每個插入語句上開始,結束事務?
我想知道的是,如果.execute(「INSERT ...」)語句爲每個執行語句開始並結束一個事務?或者它只是在第一次執行時執行一個BEGIN,並等待執行.commit()操作,因此我可以執行10,000個.execute命令,然後執行.commit(),因此我只做了一個事務?
我並不十分清楚故事的這一面,我真的很感謝這方面的任何投入。
從SQLite的優化常見問題[1]:
,除非已經在交易中,每個SQL語句有一個新的 交易開始吧。這非常昂貴,因爲它需要 重新打開,寫入並關閉每個 聲明的日誌文件。這可以通過用BEGIN TRANSACTION包裝SQL語句序列 來避免;和END TRANSACTION;聲明。這種加速 也獲得了不改變數據庫的語句。
所以,有兩種方式:
BEGIN
和COMMIT
聲明。[1] http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html
默認情況下,sqlite3的模塊打開交易數據修改語言(DML)語句之前隱式(即
INSERT
/UPDATE
/DELETE
/REPLACE
),以及之前提交交易隱含非DML非查詢語句(即除SELECT
或前述之外的任何內容)。
使用Python'sqlite3'模塊時,這是不正確的。 –