2016-07-22 60 views
1

對於SQLite,給定一個SQL查詢Q,我想弄清楚如何使用C++ API從SQLite的查詢優化器中獲得Q的估計查詢執行成本。SQLite:從查詢優化器獲取查詢成本

我已經搜索了這個問題,在SQLite的網站上發現了很多關於這個代價的討論,以及查詢優化器在內部如何使用它。但我無法找到任何C++ API調用來獲取此成本。

因此,我猜可能這樣的調用沒有實現,但也許有人可能知道從SQLite中獲取成本的方法?

回答

0

documentation說:

瞭解釋查詢計劃的命令返回的數據僅用於交互式調試。輸出格式可能會在SQLite版本之間改變。應用程序不應該依賴於EXPLAIN QUERY PLAN命令的輸出格式。

任何屬於API的部分都需要永遠支持,所以查詢優化器的詳細信息不能成爲API的一部分。

如果你真的想要這些值,並知道你在做什麼,你可以修改SQLite源代碼來返回它們。


sqlite3_stmt_status() function允許您檢索語句的一些性能相關的指標,但這些都不是預期,但執行後的實際成本

+0

謝謝!我希望有人已經看過來源,並知道如何做到這一點:)我已經 –

+0

謝謝!我希望有人已經看過源代碼,並知道如何做到這一點:) 我已經看過SQLite的源代碼自己尋找「成本」,但無法迅速找出如何得到這樣的估計。 準確地說,在執行這些查詢之前,給出兩個不同的SQL查詢,我需要能夠根據SQLite的優化​​器判斷哪一個更昂貴。我不需要估計實際的運行時間本身。 –

+0

請參閱'Parse'結構中的'nQueryLoop'。 'sqlite3WhereEnd()'遞歸地恢復舊值,所以你應該將它保存到'Parse'中的另一個字段,並將其複製到'sqlite3Prepare()'中的語句中。 –