В SQLite3 этот оператор выбора получит выгоду от двух индексов? - PullRequest
1 голос
/ 20 августа 2009

Я использую DBD :: SQLite в базе данных памяти. Я определил следующие индексы для таблицы:

CREATE INDEX x ON ss (a, b);
CREATE INDEX y ON ss (c, d, e, o);

Будут ли следующие операторы выбора использовать эти два индекса?

SELECT f, g
FROM ss
WHERE a = ? AND b = ? AND c = ? AND d = ? AND e = ?

И я должен только создавать индексы для этих столбцов в предложении where?


Я спрашиваю это только потому, что хочу запустить больше SELECT с минимальным индексом.

SELECT f, g FROM ss WHERE o = ?
SELECT f, g FROM ss WHERE a = ? AND b = ?
SELECT f, g FROM ss WHERE c = ? AND d = ? AND e = ?
SELECT f, g FROM ss WHERE c = ? AND d = ? AND o = ?
SELECT f, g FROM ss WHERE a = ? AND b = ? AND c = ? AND d = ? AND e = ?

Ответы [ 3 ]

2 голосов
/ 21 августа 2009

Используйте EXPLAIN QUERY PLAN (http://sqlite.org/lang_explain.html), чтобы увидеть, какие индексы используются.

EXPLAIN QUERY PLAN
SELECT f, g
FROM ss
WHERE a = ? AND b = ? AND c = ? AND d = ? AND e = ?

Reuslt в чем-то вроде

"0","0","TABLE ss WITH INDEX ..."
0 голосов
/ 21 августа 2009

Насколько я помню документацию по SQLite, SQLite всегда использует only one index.

Так что вы обязательно потерпите неудачу здесь. Но вы можете создать один индекс, содержащий все соответствующие поля (хотя это может создать дополнительное потребление памяти для размера индекса и замедлить вставки и обновления).

Исправление: в новейшей документации говорится, что оптимизатор пытается использовать "хотя бы один индекс", см. Документ оптимизатора . Кажется, что он был немного обновлен - но все же неясно, когда он использует множественные индексы. Таким образом, вы должны использовать «EXPLAIN QUERY PLAN» в качестве формулировки от wierob.

0 голосов
/ 20 августа 2009

Может быть неправильно, но учитывая небольшой размер sqlite, я был бы очень удивлен, если бы он когда-либо использовал более 1 индекса для каждой таблицы в (под) Select.

Базы данных Monster, такие как ORACLE и DB2, только недавно начали использовать более одного индекса на таблицу для каждого поднабора, а затем - редко.

...