gpt4 book ai didi

sql - 在 ORDER BY 子句中使用索引

转载 作者:太空狗 更新时间:2023-10-30 01:56:00 25 4
gpt4 key购买 nike

我已阅读 Indexing Order By “SQL Performance Explained”一书的部分。我对此有一些疑问。假设我们在 (a, b, c) 上有一个复合索引。我的理解正确吗?

  1. SELECT * FROM tbl WHERE a = ?和 b = ?和 c = ? ORDER BY a, b, c:将为WHEREORDER BY
  2. 使用索引
  3. SELECT * FROM tbl WHERE a = ? ORDER BY b:将为 WHEREORDER BY
  4. 使用索引
  5. SELECT * FROM tbl WHERE a = ? ORDER BY c:将为WHERE 使用索引,但NOT 将为ORDER BY
  6. 使用索引
  7. SELECT * FROM tbl WHERE a = ?和 b = ? ORDER BY c:将为 WHEREORDER BY
  8. 使用索引
  9. SELECT * FROM tbl WHERE b = ?和 c = ? ORDER BY a:将将索引用于WHERE,但将其用于ORDER BY
  10. SELECT * FROM tbl WHERE a = ?和 c = ? ORDER BY b:我不知道这个。请帮忙。
  11. SELECT * FROM tbl WHERE c = ? ORDER BY b:将WHEREORDER BY
  12. 使用索引

最佳答案

一些数据库有额外的索引使用,但一般来说,前 4 个和最后一个是正确的。

第(5)项取决于引擎和数据的特性。有两种方法可以处理这个查询:

  • 选择正确的行并对其进行排序。
  • 读取有序数据,然后进行过滤。

第二个使用索引,第一个不使用。

项目 (6)。典型的引擎会针对 a 上的条件有效地使用索引。之后会发生什么取决于引擎。这类似于 (5) 的情况,其中引擎可以使用索引进行排序,但也可以先进行过滤。

顺便说一句,只选择 a、b 和 c 而不是 * 可能会影响 (5) 和 (6) 的优化选项。

关于sql - 在 ORDER BY 子句中使用索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25572026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com