我有一个 Sqlite 数据库,我想检查索引是否正确。MS SQL Analyzer 非常擅长分解查询执行和使用的索引。
Sqlite 有类似的工具吗?
我有一个 Sqlite 数据库,我想检查索引是否正确。MS SQL Analyzer 非常擅长分解查询执行和使用的索引。
Sqlite 有类似的工具吗?
正如outis所说:
EXPLAIN QUERY PLAN SELECT * FROM FOO
如果像我一样,您只是使用它来确保您达到索引(索引?)
我知道没有漂亮的图形工具,但您寻找的所有信息都可以从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
但这并不像看起来那么难,并为您提供有关查询的完整故事。
有这个不错的图形工具
https://github.com/asutherland/grok-sqlite-explain
这是输出示例:
以及相关的博文:http: //www.visophyte.org/blog/2010/04/06/performance-annotated-sqlite-explaination-visualizations-using-systemtap/