Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SQLite - как чиать планы / 4 сообщений из 4, страница 1 из 1
08.08.2009, 11:22
    #36133387
PPA
PPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLite - как чиать планы
Подскажите доку про планы.
что означают колонки p* ?

вот пример двух запросов с агрегацией и без:
кое что понятно.... но не все
напримр, почему у одного Goto = 20, у другого = 13 :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
sqlite> EXPLAIN QUERY PLAN select max(id) from fly_hash where tth='rferferferf';
orde  from           deta
----  -------------  ----
 0       0               TABLE fly_hash WITH INDEX sqlite_autoindex_fly_hash_1 ORDER BY
sqlite> EXPLAIN select max(id) from fly_hash where tth='rferferferf';
addr  opcode         p1    p2    p3    p4             p5  comment
----  -------------  ----  ----  ----  -------------  --  -------------
 0      Trace           0       0       0                      00 
 1      Null            0       2       0                      00 
 2      Null            0       1       0                      00 
 3      String8         0       3       0      rferferferf     00 
 4      Goto            0       20      0                      00 
 5      OpenRead        1       6       0      keyinfo( 1 ,BINARY)   00 
 6      IsNull          3       15      0                      00 
 7      Affinity        3       1       0      ab              00 
 8      SeekLe          1       15      3       1                00 
 9      IdxLT           1       15      3       1                00 
 10     IdxRowid        1       5       0                      00 
 11     CollSeq         0       0       0      collseq(BINARY)   00 
 12     AggStep         0       5       1      max( 1 )          01 
 13     Goto            0       15      0                      00 
 14     Prev            1       9       0                      00 
 15     Close           1       0       0                      00 
 16     AggFinal        1       1       0      max( 1 )          00 
 17     SCopy           1       6       0                      00 
 18     ResultRow       6       1       0                      00 
 19     Halt            0       0       0                      00 
 20     Transaction     0       0       0                      00 
 21     VerifyCookie    0       25      0                      00 
 22     TableLock       0       5       0      fly_hash        00 
 23     Goto            0       5       0                      00 
sqlite> EXPLAIN select id from fly_hash where tth='rferferferf';
addr  opcode         p1    p2    p3    p4             p5  comment
----  -------------  ----  ----  ----  -------------  --  -------------
 0      Trace           0       0       0                      00 
 1      String8         0       1       0      rferferferf     00 
 2      Goto            0       13      0                      00 
 3      OpenRead        1       6       0      keyinfo( 1 ,BINARY)   00 
 4      IsNull          1       11      0                      00 
 5      Affinity        1       1       0      ab              00 
 6      SeekGe          1       11      1       1                00 
 7      IdxGE           1       11      1       1                01 
 8      IdxRowid        1       3       0                      00 
 9      ResultRow       3       1       0                      00 
 10     Next            1       7       0                      00 
 11     Close           1       0       0                      00 
 12     Halt            0       0       0                      00 
 13     Transaction     0       0       0                      00 
 14     VerifyCookie    0       25      0                      00 
 15     TableLock       0       5       0      fly_hash        00 
 16     Goto            0       3       0                      00 
sqlite>
--
~PPA() {} //
...
Рейтинг: 0 / 0
08.08.2009, 14:37
    #36133482
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLite - как чиать планы
Что непонятно в выводе EXPLAIN QUERY PLAN? Команда EXPLAIN нужна разработчикам движка (ну, иногда еще для проверки порядка объединения таблиц может быть использована, хотя этот порядок известен и так). Если есть желание разобраться, смотрите описание виртуальной машины, реализованной в SQLite, там все opcode есть.
...
Рейтинг: 0 / 0
08.08.2009, 18:49
    #36133623
PPA
PPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLite - как чиать планы
MBG,

а как стоимость определить в общем случае?
т.е. какой запрос лучше/хуже?
...
Рейтинг: 0 / 0
08.08.2009, 20:51
    #36133684
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLite - как чиать планы
Стоимость выполнения запроса сама по себе не сильно интересна - важен оптимальный способ выполнения, а не стоимость возможных вариантов. Так что нужно смотреть лишь за тем, чтобы при объединениях таблиц и поиске по условию использовались индексы (как пример, "WITH INDEX sqlite_autoindex_fly_hash_1").
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SQLite - как чиать планы / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]