Предполагая, что у меня есть схема, как это:Индексы с пользовательскими параметрами сортировки в SQLite
CREATE TABLE abc(
id INTEGER PRIMARY KEY AUTOINCREMENT,
txt TEXT
);
CREATE INDEX "txtCS" ON "abc"("txt" COLLATE MY_CUSTOM_SORT);
когда будет SQLITE использовать мой индекс на txt
?
, потому что я побежал: (. Это не поиск, как я ожидал)
EXPLAIN QUERY PLAN SELECT * FROM abc ORDER BY txt COLLATE MY_CUSTOM_SORT DESC ...
и он говорит мне, что он просматривает таблицу, дважды, используя txtCS
индекс
MY_CUSTOM_SORT
это мой собственную функцию сортировки, которую я подключил с помощью sqliteCreateCollation
. Мне просто нужен этот индекс для некоторых запросов, которые связаны с специальным заказом, и я хочу, чтобы они были быстрыми.
Я получаю одну запись 'SCAN TABLE abc ИСПОЛЬЗОВАНИЕ ПОКРЫТИЯ INDEX txtCS', что отлично. Что это за '...'? Какая версия SQLite? –
Это то, что я тоже получаю. Но почему это SCAN, а не ПОИСК? – thelolcat
Я предполагаю, что для использования пользовательского индекса SQL функция MY_CUSTOM_SORT должна быть явно объявлена как SQLITE_DETERMINISTIC - см. Раздел [Indexes On Exions, Restrictions] (https://www.sqlite.org/expridx.html) для получения более подробной информации –