作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我已阅读 Indexing Order By “SQL Performance Explained”一书的部分。我对此有一些疑问。假设我们在 (a, b, c)
上有一个复合索引。我的理解正确吗?
SELECT * FROM tbl WHERE a = ?和 b = ?和 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
使用索引,但NOT 将为ORDER BY
SELECT * FROM tbl WHERE a = ?和 b = ? ORDER BY c
:将为 WHERE
和 ORDER BY
SELECT * FROM tbl WHERE b = ?和 c = ? ORDER BY a
:将不将索引用于WHERE
,但将其用于ORDER BY
SELECT * FROM tbl WHERE a = ?和 c = ? ORDER BY b
:我不知道这个。请帮忙。SELECT * FROM tbl WHERE c = ? ORDER BY b
:将不为WHERE
和ORDER BY
最佳答案
一些数据库有额外的索引使用,但一般来说,前 4 个和最后一个是正确的。
第(5)项取决于引擎和数据的特性。有两种方法可以处理这个查询:
第二个使用索引,第一个不使用。
项目 (6)。典型的引擎会针对 a
上的条件有效地使用索引。之后会发生什么取决于引擎。这类似于 (5) 的情况,其中引擎可以使用索引进行排序,但也可以先进行过滤。
顺便说一句,只选择 a、b 和 c 而不是 *
可能会影响 (5) 和 (6) 的优化选项。
关于sql - 在 ORDER BY 子句中使用索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25572026/
我是一名优秀的程序员,十分优秀!