mysql - 哪一列放在索引的第一位?更高或更低的基数?

标签 mysql indexing query-optimization cardinality

例如,如果我有一个包含 citystate 列的表,使用索引的最佳方式是什么?

显然 city 将具有最高的基数,所以我应该将该列放在索引的第一位,我应该把 state 放在首位吗?

最佳答案

在这种情况下没关系:

INDEX cs (city, state),
INDEX sc (state, city)

WHERE city = 'Atlanta'
  AND state = 'Georgia'

无论使用哪个索引,BTree 中的向下钻取都将是相同的工作量,并且您将以同样快的速度到达一行。

(WHERE 中子句的顺序无关紧要。)

(如果您使用的是“范围”测试而不是 = 测试,那是 a different Question。)

关于mysql - 哪一列放在索引的第一位?更高或更低的基数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12315496/

相关文章:

mysql - 更新分配在不同表中的发票 ID 的代码

mysql - Node.js Lambda - 将 TypeORM 与 MySql 结合使用

mysql - 在没有索引的 mysql 5.0 中运行时间良好,但在 5.1 中则不然

javascript - 在 OPENSIPS 中使用哈希表加速 Mysql 查询

grails - 如何优化Grails中的select属性?

mysql - 慢子查询: group by a groupwise maximum

php - Eloquent 在创建请求时不要引用字符串

php - 如何获取 mysql 中更新行的主键?

MySQL - 重复表的基数存在巨大差异

mysql - sphinx搜索字段权重