У меня есть запрос sqlite, который должен запускаться как можно быстрее. Запрос довольно прост, но я не знаю, как лучше всего индексировать таблицу для максимальной производительности.Лучшие индексы для этой таблицы и запроса?
Таблица называется «лексикон». Определение:
_id integer primary key
word text
frequency integer
lset integer
rset integer
запрос:
SELECT word,frequency FROM lexicon WHERE lset>? AND rset<? ORDER BY frequency DESC LIMIT ?
Я проиндексированы все отдельные столбцы, но я подозреваю, составные индексы могут быть лучше, но какая комбинация? И должны ли индексы на lset и rset быть восходящими или нисходящими?
EDIT: lset и rset - вложенные значения множества, представляющие древовидную структуру. Поэтому все значения lset и rset взаимно уникальны и отлично распределены. Кроме того, в любой строке lset < rset.
Заранее спасибо ...
Как всегда, это зависит! В этом случае селективность предикатов 'lset' и' rset' будет критической. Скорее всего, 'lset>?' Вернет большее или меньшее количество записей, чем 'rset ' В одиночку? –
Большой вопрос. Я должен был упомянуть, что lset и rset представляют собой вложенные значения множества, представляющие древовидную структуру. Поэтому все значения lset и rset взаимно уникальны и отлично распределены с диапазоном 1- 2 * N (где N - количество строк в таблице). –
@Barry: Вы (также) означаете, что следующее всегда верно ?: 'lset <= rset' –