簡體   English   中英

sqlite合並3.7和3.16之間的巨大性能差異

[英]Massive performance difference between sqlite amalgamation 3.7 and 3.16

我有一個MS Window可執行文件,用不受管的純文本“ C”編寫,該文件將GUI包裝器放在嵌入式數據庫引擎(SQLite)周圍。 合並包3.7.14.1提供了SQLite功能,特別是2個文件sqlite3.h和sqlite3.c對“開箱即用”文件的唯一更改是添加以下行:#define SQLITE_ENABLE_COLUMN_METADATA 1

都是使用Visual Studio 2008在Win 7(64bit)系統上編譯的,但是我將其編譯為32位應用程序。

我已經將文件sqlite3.h和sqlite3.c換成了合並包3.15.2中的文件,唯一的變化是添加以下行:#define SQLITE_ENABLE_COLUMN_METADATA 1

我沒有對項目配置進行任何更改。 我只交換2個文件!

我有一個復雜的腳本,該腳本將一個大約600 MB的大數據庫加載到內存中,然后執行很多SELECTS並將結果傳輸到Excel(使用GUI包裝器中的功能)。

我的問題。 使用合並包3.7.14.1的版本的性能比合並包3.15.2 一百倍。 我正在使用完全相同的“腳本”。

我嘗試了合並軟件包3.16,這並沒有更好。 我可以看到性能損失在SQL引擎中(通過在進入和離開SQL機器時顯示彈出窗口。就我的GUI包裝器,Visual Studio配置,項目配置而言,所有內容都是相同的。我認為性能是相同的)問題在於合並包中的某些編譯器開關。

有誰知道我應該去哪里看?

此問題很可能是由SQLite的3.8.0版中引入的下一代查詢計划程序引起的。 找到慢的特定查詢后,您可以嘗試運行帶有explain前綴的查詢。 這將轉儲查詢計划,使您可以看到3.7.14和3.15.2創建的計划之間的差異。

在沒有看到查詢或數據庫的情況下很難確切地說出問題所在,但是通常可以通過索引來提高查詢性能,因此我首先要尋找計划中可以通過添加索引來避免的任何表掃描。 要嘗試的另一件事是在數據庫上運行analyze以生成統計表,以幫助計划者構建最佳查詢計划。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM