在SQL中,当查询按多个条件进行过滤时,简单优化是在限制较少的条件之前列出更多限制条件,因为条件是按照倒数第一顺序进行评估的。
SELECT _id, col1, col2, col3
FROM table
WHERE
col1 = "most_resctrictive_condition" AND
col2 = "less_resctrictive_condition" AND
col3 = "least_resctrictive_condition"
问题:在SQLite中,如果索引了某个特定列,SQLite是否会首先评估索引列上的条件,即使它是在其他条件之后列出的?例如,如果col3
被索引但其他列没有被索引,那么SQLite会首先将第三个条件作为优化进行评估,还是始终按照查询中条件出现的顺序进行评估?
答案 0 :(得分:1)
SQLite忽略查询中条件的顺序,并始终按照它估计最有效的顺序对它们进行评估。
阅读文档:
ANALYZE
EXPLAIN QUERY PLAN
Query Planning
Optimizer Overview