私はインデックスをチェックしたいSqliteデータベースを持っていますが正しいです。 MS SQL Analyzerは、クエリの実行を中断し、インデックスを活用するのに優れています。どのようにSqliteクエリの実行を分析できますか?
Sqliteにも同様のツールがありますか?
私はインデックスをチェックしたいSqliteデータベースを持っていますが正しいです。 MS SQL Analyzerは、クエリの実行を中断し、インデックスを活用するのに優れています。どのようにSqliteクエリの実行を分析できますか?
Sqliteにも同様のツールがありますか?
わかりやすいグラフィカルなツールはありませんが、私が探している情報はすべてEXPLAIN
というキーワードから入手できます。
sqlite> explain select * from users where name='foo'; 0|Trace|0|0|0||00| 1|String8|0|1|0|foo|00| 2|Goto|0|18|0||00| 3|OpenRead|0|2|0|2|00| 4|OpenRead|1|3|0|keyinfo(1,BINARY)|00| 5|IsNull|1|15|0||00| 6|Affinity|1|1|0|bb|00| 7|SeekGe|1|15|1|1|00| 8|IdxGE|1|15|1|1|01| 9|IdxRowid|1|2|0||00| 10|Seek|0|2|0||00| 11|Column|1|0|3||00| 12|Column|0|1|4||00| 13|ResultRow|3|2|0||00| 14|Next|1|8|0||00| 15|Close|0|0|0||00| 16|Close|1|0|0||00| 17|Halt|0|0|0||00| 18|Transaction|0|0|0||00| 19|VerifyCookie|0|5|0||00| 20|TableLock|0|2|0|users|00| 21|Goto|0|3|0||00|:名前を前提とクエリが
user_names
インデックスを使用しますに対し
sqlite> explain select * from users where email='foo'; 0|Trace|0|0|0||00| 1|String8|0|1|0|foo|00| 2|Goto|0|13|0||00| 3|OpenRead|0|2|0|2|00| 4|Rewind|0|11|0||00| 5|Column|0|1|2||00| 6|Ne|1|10|2|collseq(BINARY)|6a| 7|Column|0|0|4||00| 8|Column|0|1|5||00| 9|ResultRow|4|2|0||00| 10|Next|0|5|0||01| 11|Close|0|0|0||00| 12|Halt|0|0|0||00| 13|Transaction|0|0|0||00| 14|VerifyCookie|0|5|0||00| 15|TableLock|0|2|0|users|00| 16|Goto|0|3|0||00|
:
sqlite> create table users (name, email); sqlite> create index user_names on users (name);
email
を前提クエリがインデックスを使用しません。
EXPLAIN
を使用する場合はSQLiteのの仮想マシン、VDBEでグリップに来る:
http://www.sqlite.org/vdbe.html
しかし、これは、ハード、それは見た目ほどではない、とあなたのクエリについての完全な物語を提供します。
outisが言ったように:(?インデックス)あなたは、単にあなたがインデックスにヒットしていることを確認するためにそれを使用している私のような場合
EXPLAIN QUERY PLAN SELECT * FROM FOO
は、より読みやすい出力でトリックをい
このコマンドの出力についての良い説明は、https://www.sqliteです。 .org/eqp.html – JoshB
ありますこの素敵なグラフィカルツール
https://github.com/asutherland/grok-sqlite-explain
は、ここでは、出力の例です:
と、関連するブログ投稿: http://www.visophyte.org/blog/2010/04/06/performance-annotated-sqlite-explaination-visualizations-using-systemtap/
'QUERY PLAN'は、VMの指示なしに、インデックスの使用に関する情報を提供しますEXPLAIN。 – outis
コマンドラインで.explainオプションを有効にすることで、出力形式を改善することもできます。 ".explain ON | OFF EXPLAINに適した出力モードをオンまたはオフにします。 – Wade
上記のリンクは古くなっていますので、ここで仮想マシンに関する情報をご覧ください:http://www.sqlite.org/opcode.html – Fabian