我有一个这样的sql:
SELECT * FROM tableA WHERE column_a = sth AND colun_b > sth
那么,我该如何为它创建索引呢?
- 两列一个索引
- 每列两个索引
哪个更好?
最佳答案
如果您正在针对那个查询进行优化,那么 a
将是最佳优化。您的 WHERE
子句将首先检查 column_a
,如果不匹配则继续到下一行。它只会继续检查 column_b
如果它是 column_a
的匹配项。因此,您需要一个首先按 column_a
排序,然后按 column_b
排序的索引,而不是两个单独的索引。
考虑这与 OR
子句相对,您通常需要两个单独的索引,因为 OR
说,“首先选择 的所有匹配项column_a
和then 分别选择column_b
的所有匹配项,最后将结果集合并在一起”。由于该查询在检查 column_b
时不使用来自 column_a
的反馈,因此您希望在那里使用不同的索引。
另请注意,这都是用非常笼统的术语编写的。这些事情可能会因情况而异,具体取决于您的数据是什么样子的。一个好的方法是创建一个索引,看看性能如何,然后放弃它,创建另一个,然后选择最好的一个。
关于sql - 关于mysql索引,多列还是一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1804242/