2016-07-22 13 views
1

SQLiteの場合、SQLクエリQを使用して、C++ APIを使用してQの推定クエリ実行コストをSQLiteのクエリオプティマイザから取得する方法を見つけようとしています。SQLite:クエリオプティマイザからのクエリコストの取得

この問題を調査したところ、SQLiteのWebサイトでこのコストに関する多くの議論があり、クエリオプティマイザで内部的にどのように使用されているのかが分かりました。しかし、私はこのコストを得るためのC++ APIコールを見つけることができません。

私はこのような呼び出しが実装されていないと思うかもしれませんが、おそらく誰かがこのコストをSQLiteから得る方法を知っている可能性がありますか?

答えて

0

documentationは言う:EXPLAIN QUERYのPLANコマンドによって返さ

データのみインタラクティブデバッグのために意図されます。出力形式はSQLiteのリリース間で変更されることがあります。アプリケーションは、EXPLAIN QUERY PLANコマンドの出力形式に依存してはいけません。

APIの一部であるものは永遠にサポートする必要があるため、クエリオプティマイザの詳細をAPIの一部にすることはできません。

本当にそれらの値が必要な場合や、何をやっているのかわかっている場合は、SQLiteソースコードを変更して返すことができます。


sqlite3_stmt_status() functionあなたは文のいくつかのパフォーマンス関連のメトリックを取得することができますが、これらは、見積りが、実行後実際コストではありません。

+0

ありがとうございます!私は誰かが既にソースを見て、それを行う方法を知っていることを望んでいた:)私は –

+0

ありがとう!誰かが既にソースコードを見て、それを行う方法を知っていることを期待していました:) 「費用」を探しているSQLiteのソースコードを見てきましたが、そのような見積もりを手早く得る方法を見つけることができませんでした。 正確には、2つの異なるSQLクエリがある場合、これらのクエリが実行される前に、どちらがSQLiteのオプティマイザに従って高価であるかを知ることができる必要があります。実際の走行時間そのものの見積もりは必要ありません。 –

+0

'Parse'構造体の' nQueryLoop'を参照してください。 'sqlite3WhereEnd()'は古い値を再帰的に復元するので、 'Parse'の別のフィールドに保存し、' sqlite3Prepare() 'の文にコピーしてください。 –