加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何分析一个Sqlite查询执行?

发布时间:2020-12-12 19:15:53 所属栏目:百科 来源:网络整理
导读:我有一个Sqlite数据库,我想检查索引是否正确。 MS SQL Analyzer很好地打破了查询执行和利用的索引。 是否有类似的Sqlite工具? 我知道没有漂亮的图形工具,但是你所寻求的所有信息都可以从EXPLAIN关键字中获得。 考虑这个数据库: sqlite create table user
我有一个Sqlite数据库,我想检查索引是否正确。 MS SQL Analyzer很好地打破了查询执行和利用的索引。

是否有类似的Sqlite工具?

我知道没有漂亮的图形工具,但是你所寻求的所有信息都可以从EXPLAIN关键字中获得。

考虑这个数据库:

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

基于电子邮件的查询不会使用索引:

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|

而基于name的查询将使用user_names索引:

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|

使用EXPLAIN确实需要掌握SQLite的虚拟机VDBE:

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

但这并不像看起来那么难,而是给你关于你的查询的完整的故事。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读