私はSQLiteデータベースを使用しており、おそらくインデックスを使用するか、それらを完全に再構築することによって、クエリを高速化したいと考えています。
クエリをプロファイリングするツールはありますか?それは、物事がどこで減速しているかを判断するのに役立つ可能性がありますか?
SQLite Administratorのようなツールにクエリを入力して時間を計ることができることはわかっていますが、それよりも少し体系的なものを探しています。おそらく、バックグラウンドにあり、入力したすべてのクエリを確認するものです。期間、ボトルネックの内訳を示します。
ここにはさまざまな質問があります。実行されるクエリとそれぞれにかかる時間を表示するには、アプリケーションがsqlite3.dllにリンクしている場合は、sqlite3.dllを変更する必要があります。または、独自のアプリケーションの場合は、コードに簡単に書き込むことができます(これを実行すると、すべてが長くなります)クエリ、トランザクション、タイミングなど)。
個々のクエリ分析には、EXPLAIN
を使用できます。クエリ内の個々のステップのタイミングはわかりませんが、クエリがどのように実行されたかはわかります。
http://www.sqlite.org/lang_explain.html
SQLステートメントの前には、キーワード "EXPLAIN"または句 "EXPLAIN QUERY PLAN"を付けることができます。どちらの変更も、SQLステートメントをクエリとして動作させ、EXPLAINキーワードまたは句が省略された場合にSQLステートメントがどのように動作したかに関する情報を返します。
EXPLAINキーワードが単独で表示されると、ステートメントは、EXPLAINキーワードが存在しない場合にコマンドを実行するために使用した一連の仮想マシン命令を返すクエリとして動作します。 EXPLAIN QUERY PLAN句が表示されると、ステートメントは、使用されたであろうインデックスに関する高レベルの情報を返します。
EXPLAINおよびEXPLAIN QUERY PLANからの出力は、インタラクティブな分析とトラブルシューティングのみを目的としています。出力形式の詳細は、SQLiteのリリースごとに変更される可能性があります。アプリケーションは、正確な動作が文書化されておらず、指定されておらず、可変であるため、EXPLAINまたはEXPLAIN QUERYPLANを使用しないでください。
これは質問の一部にしか答えません(残念ながら、最も役に立たない部分)。
私はこれをグーグルで調べて、クエリの時間を計る何かを探していたので、sqlite3クライアントにはタイマーメタコマンドがあります。
sqlite> .timer on
それ以降、すべてのクエリ結果にCPUタイマー統計が追加されます。これが少なくとも少し役立つことを願っています。
SQLiteには実験的なsqlite3_trace
およびsqlite3_profile
(詳細については https://www.sqlite.org/c3ref/profile.html を参照してください)。それらは、長いテスト中に統計を持ったり、犯人を調査したりするのに役立ちます。