{SQLITE3} Как я могу заставить запрос не использовать индекс для данной таблицы? - PullRequest
0 голосов
/ 03 декабря 2018

Я делаю анализ производительности по базе данных mondial с использованием sqlite3.Один тестовый пример, где я должен сравнивать производительность с индексом и без него (он также не должен использовать sqlite_autoindex).

Я нашел эту ссылку: Как заставить запрос не использовать индекс для данной таблицы? очень полезно, но большинство ответов относятся к SQL SERVER.Но мне это нужно для SQLITE3.(Я пробовал варианты PRAGMA, но безрезультатно).

1 Ответ

0 голосов
/ 03 декабря 2018

Это скрыто в синтаксических диаграммах для SELECT , но есть способ - использовать NOT INDEXED с именем таблицы в предложении FROM:

sqlite> CREATE TABLE foo(bar);
sqlite> CREATE INDEX foo_idx ON foo(bar);
sqlite> EXPLAIN QUERY PLAN SELECT * FROM foo WHERE bar = ?;
QUERY PLAN
`--SEARCH TABLE foo USING COVERING INDEX foo_idx (bar=?)
sqlite> EXPLAIN QUERY PLAN SELECT * FROM foo NOT INDEXED WHERE bar = ?;
QUERY PLAN
`--SCAN TABLE foo

Как выКак видите, первый запрос использует индекс, а второй - нет.

Как читать вывод EXPLAIN QUERY PLAN .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...