sql - 关于mysql索引,多列还是一个?

标签 sql mysql optimization indexing

我有一个这样的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_athen 分别选择column_b 的所有匹配项,最后将结果集合并在一起”。由于该查询在检查 column_b 时不使用来自 column_a 的反馈,因此您希望在那里使用不同的索引。

另请注意,这都是用非常笼统的术语编写的。这些事情可能会因情况而异,具体取决于您的数据是什么样子的。一个好的方法是创建一个索引,看看性能如何,然后放弃它,创建另一个,然后选择最好的一个。

关于sql - 关于mysql索引,多列还是一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1804242/

相关文章:

php - 如何在单个查询中执行多个选择查询并仍然检索值

MySQL 使用 char_length() 检查一系列字符未给出结果

Sql:模拟参数化 LIMIT

php - Joomla 已移动,现在 index.php 将我重定向到根文件夹

php - Cakephp 3 动态更改数据库连接?有效率吗?

SQL查询非重复记录

mysql - symfony 1.4 推进 :build-all not working on Mysql 5. 5

optimization - 一般来说,调用外部程序的成本有多高?

c++ - 有没有办法提高这种查找的速度或效率? (C/C++)

c - 为 Core 2 或 Core i7 架构完全优化的 memcpy/memmove?