sql - 在 SQLite3 中,这个 select 语句会受益于两个索引吗?

标签 sql database sqlite indexing rdbms

我在内存数据库中使用 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/

相关文章:

MySQL:错误代码 1215 无法添加外键约束。我没有重复的主键并且所有数据类型都匹配

mysql - 从父值计算子成员

mysql - 类别和子类别 MySQL

php real_escape_string(),查询不再工作

c - 从 sqlite 中检索字符串形式的数字并转换为 int

sql - 使用另一个数组查找数组中出现的次数?

java - 连接到外部数据库 - Android 应用程序

c - C语言中的SQLite : Getting multiple single valued stats from table more efficiently

Android SQLite 数据库 onCreate 错误

php - 通过将时间戳与当前时间戳进行比较来判断时间戳是否过期