我在内存数据库中使用 DBD::SQLite。我为一个表定义了以下索引:
CREATE INDEX x ON ss (a, b);
CREATE INDEX y ON ss (c, d, e, o);
下面的select语句会用到这两个索引吗?
SELECT f, g
FROM ss
WHERE a = ? AND b = ? AND c = ? AND d = ? AND e = ?
而且,我应该只在 where 子句中的那些列上创建索引吗?
我问这个只是因为我想用最少的 INDEX 运行更多的 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 = ?
最佳答案
使用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 = ?
结果类似
"0","0","TABLE ss WITH INDEX ..."
关于sql - 在 SQLite3 中,这个 select 语句会受益于两个索引吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1305004/