25

インデックスが正しいことを確認したいSqliteデータベースがあります。MS SQL アナライザーは、クエリの実行と使用されているインデックスを分析するのに優れています。

Sqlite 用の同様のツールはありますか?

4

3 に答える 3

26

outisが言ったように:

EXPLAIN QUERY PLAN SELECT * FROM FOO

私のように、インデックスにヒットしていることを確認するために単にそれを使用している場合、より読みやすい出力でのトリックはありますか(インデックス?)

于 2011-08-04T04:27:18.503 に答える
18

きれいなグラフィカル ツールは知りませんが、検索するすべての情報はEXPLAINキーワードから入手できます。

次のデータベースを検討してください。

sqlite> create table users (name, email);
sqlite> create index user_names on users (name);

を前提とするクエリemailは、インデックスを使用しません。

sqlite> explain select * from users where email='foo';
アドレス オペコード p1 p2 p3 p4 p5 コメント
0 痕跡 0 0 0 00
1 文字列 8 0 1 0 ふー 00
2 後藤 0 13 0 00
3 OpenRead 0 2 0 2 00
4 巻き戻し 0 11 0 00
5 0 1 2 00
6 1 10 2 colseq(BINARY) 6a
7 0 0 4 00
8 0 1 5 00
9 結果行 4 2 0 00
10 0 5 0 01
11 近い 0 0 0 00
12 停止 0 0 0 00
13 取引 0 0 0 00
14 VerifyCookie 0 5 0 00
15 テーブルロック 0 2 0 ユーザー 00
16 後藤 0 3 0 00

name を前提とするクエリはuser_namesインデックスを使用します。

sqlite> explain select * from users where name='foo';
アドレス オペコード p1 p2 p3 p4 p5 コメント
0 痕跡 0 0 0 00
1 文字列 8 0 1 0 ふー 00
2 後藤 0 18 0 00
3 OpenRead 0 2 0 2 00
4 OpenRead 1 3 0 キー情報(1,BINARY) 00
5 無効です 1 15 0 00
6 親和性 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 求める 0 2 0 00
11 1 0 3 00
12 0 1 4 00
13 結果行 3 2 0 00
14 1 8 0 00
15 近い 0 0 0 00
16 近い 1 0 0 00
17 停止 0 0 0 00
18 取引 0 0 0 00
19 VerifyCookie 0 5 0 00
20 テーブルロック 0 2 0 ユーザー 00
21 後藤 0 3 0 00

使用EXPLAINするには、SQLite の仮想マシンである VDBE を理解する必要があります。

http://www.sqlite.org/opcode.html

しかし、これは見た目ほど難しくなく、クエリに関する完全なストーリーを提供します。

于 2009-09-21T12:14:26.233 に答える
8

この素敵なグラフィカルツールがあります

https://github.com/asutherland/grok-sqlite-explain

出力の例を次に示します。

Explain の出力例

関連するブログ投稿: http://www.visophyte.org/blog/2010/04/06/performance-annotated-sqlite-explaination-visualizations-using-systemtap/

于 2012-04-05T18:46:12.533 に答える