2
在sqlite(特別是版本3)中,ANALYZE應該在事務中運行嗎?ANALYZE應該在事務中運行嗎?
如果是這樣,並且我在做了很多更改的長事務的末尾,可以在同一事務中運行ANALYZE還是應該首先提交該事務並開始另一個ANALYZE事務?
The documentation對這種或那種方式沒有任何說法。
在sqlite(特別是版本3)中,ANALYZE應該在事務中運行嗎?ANALYZE應該在事務中運行嗎?
如果是這樣,並且我在做了很多更改的長事務的末尾,可以在同一事務中運行ANALYZE還是應該首先提交該事務並開始另一個ANALYZE事務?
The documentation對這種或那種方式沒有任何說法。
ANALYZE從索引列讀取數據並將統計信息寫入某個內部表。 這有點類似下面的查詢:
INSERT OR REPLACE INTO sqlite_statXXX
SELECT 'MyTable', 'MyColumn', COUNT(*), AVG(MyColumn) FROM MyTable
爲每個索引列做一次。
就像任何其他將數據寫入數據庫的SQL語句一樣,事務開銷將遠大於寫入數據本身的實際工作量。
在你的情況,這是不是你更改的數據可用,而不改變統計必要,所以你也可以同樣做到在同一事務的分析一下。
如果數據庫太長以至於ANALYZE運行很長時間,那麼延遲執行它可能是有意義的,直到它與更重要的事務沒有衝突時爲止。