我已阅读" SQL Performance Explained"的Indexing Order By部分书。我有一些问题。考虑我们在(a, b, c)
上有一个复合索引。我的理解是否正确?
SELECT * FROM tbl WHERE a = ? AND b = ? AND c = ? ORDER BY a, b, c
:将使用WHERE
和ORDER BY
SELECT * FROM tbl WHERE a = ? ORDER BY b
:将使用WHERE
和ORDER BY
SELECT * FROM tbl WHERE a = ? ORDER BY c
:将使用WHERE
的索引,但不使用ORDER BY
的索引SELECT * FROM tbl WHERE a = ? AND b = ? ORDER BY c
:将使用WHERE
和ORDER BY
SELECT * FROM tbl WHERE b = ? AND c = ? ORDER BY a
:不会使用WHERE
的索引,但会将其用于ORDER BY
SELECT * FROM tbl WHERE a = ? AND c = ? ORDER BY b
:我不知道这一点。请帮忙。SELECT * FROM tbl WHERE c = ? ORDER BY b
:不使用WHERE
的索引和ORDER BY
答案 0 :(得分:4)
某些数据库有额外的索引用法,但一般情况下,前4个和最后一个数据库都是正确的。
项目(5)取决于引擎和数据的特征。有两种方法可以处理此查询:
第二个使用索引,第一个不使用索引。
项目(6)。典型的引擎会有效地使用索引来a
上的条件。之后会发生什么事情取决于发动机。这类似于(5)的情况,其中引擎可以使用索引进行排序,但也可以先进行过滤。
顺便说一下,只选择a,b和c而不是*
会影响(5)和(6)的优化选项。