Как я могу проанализировать выполнение запроса Sqlite? - PullRequest
22 голосов
/ 21 сентября 2009

У меня есть база данных Sqlite, которую я хочу проверить, правильны ли индексы. MS SQL Analyzer отлично разбивает выполнение запросов и используемые индексы.

Есть ли аналогичный инструмент для Sqlite?

Ответы [ 3 ]

19 голосов
/ 04 августа 2011

Как сказано:

EXPLAIN QUERY PLAN SELECT * FROM FOO

Есть ли уловка с более читабельным выводом, если, как и я, вы просто используете его, чтобы убедиться, что вы попали в свои индексы (индексы?)

14 голосов
/ 21 сентября 2009

Я не знаю красивых графических инструментов, но вся информация, которую вы ищете, доступна по ключевому слову EXPLAIN.

Рассмотрим эту базу данных:

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

Запрос, основанный на email, не будет использовать индекс:

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|

В то время как запрос, основанный на имени, будет использовать индекс 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

Но это не так сложно, как кажется, и дает вам полную историю вашего запроса.

8 голосов
/ 05 апреля 2012

Вот этот приятный графический инструмент

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

Вот пример вывода:

Example output of explain

И связанный пост в блоге: http://www.visophyte.org/blog/2010/04/06/performance-annotated-sqlite-explaination-visualizations-using-systemtap/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...