2014-09-01 2 views
0
  1. Как понять, если созданный index используется, когда select запрос выполняется?sqlite определить, если индекс используется

  2. Конкретный пример для моей задачи:

индекс:

events (page,notuniqueid,type,timestamp); 

SQL заявление:

SELECT * 
    FROM events 
    WHERE type = 'comment' AND TIMESTAMP > $time AND PAGE = '$page' 
    LIMIT 1 

индексирует использовать в этом запросе?

ответ

1

Чтобы узнать, как выполняется запрос, запустить его с EXPLAIN QUERY PLAN:

> EXPLAIN QUERY PLAN SELECT * from events WHERE type='comment' AND TIMESTAMP > $time AND PAGE = '$page' LIMIT 1 
0|0|0|SEARCH TABLE events USING INDEX MyLittleIndex (page=?) 

В этом случае только первый столбец индекса может использоваться, потому что нет поиска на notuniqueuid колонке.

Лучший индекс (для этого запроса) был бы на (page,comment,timestamp).

(См. The SQLite Query Planner.)

+0

спасибо. но у меня есть другой запрос, который уже использует индекс по моему вопросу. Нужно ли создавать один дополнительный индекс для других запросов, например, на примере? – abrahab

+1

Использование только столбца 'page' для индексированных запросов может быть достаточно быстрым для вас. Или нет. Вы должны это измерить. –

Смежные вопросы