{SQLITE3}如何强制查询在给定表上不使用索引?

时间:2018-12-03 00:29:39

标签: sqlite console

我正在使用sqlite3对mondial数据库进行性能分析。一个测试用例,我必须比较使用和不使用索引的性能(它也不应使用sqlite_autoindex)。

我发现此链接:Bash Reference Manual非常有用,但是大多数答案都涉及SQL SERVER。但是对于SQLITE3我需要它。 (我尝试过PRAGMA选项,但没有结果)。

1 个答案:

答案 0 :(得分:1)

它埋在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

如您所见,第一个查询使用索引,第二个查询不使用索引。

How to read EXPLAIN QUERY PLAN output