25

我有一个 Sqlite 数据库,我想检查索引是否正确。MS SQL Analyzer 非常擅长分解查询执行和使用的索引。

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 开放阅读 0 2 0 2 00
4 倒带 0 11 0 00
5 柱子 0 1 2 00
6 1 10 2 collseq(二进制) 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 验证Cookie 0 5 0 00
15 桌锁 0 2 0 用户 00
16 0 3 0 00

而基于名称的查询将使用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 开放阅读 0 2 0 2 00
4 开放阅读 1 3 0 密钥信息(1,二进制) 00
5 一片空白 1 15 0 00
6 亲和力 1 1 0 bb 00
7 寻格 1 15 1 1 00
8 身份证 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 验证Cookie 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

这是输出示例:

解释的示例输出

以及相关的博文:http: //www.visophyte.org/blog/2010/04/06/performance-annotated-sqlite-explaination-visualizations-using-systemtap/

于 2012-04-05T18:46:12.533 回答