【发布时间】:2016-04-04 13:37:57
【问题描述】:
我有一个包含数百万条记录的表,我将在 FieldA 和 FieldB 上使用 Where 进行选择。 FieldA 有数千个可能的值,而 FieldB 只有 5 个。我最好不要:
- 在每条记录上添加索引,即 Index(A)、Index(B)
- 仅在 FieldA 上添加索引
- 添加分组索引,即 Index(A,B)
【问题讨论】:
标签: mysql optimization indexing
我有一个包含数百万条记录的表,我将在 FieldA 和 FieldB 上使用 Where 进行选择。 FieldA 有数千个可能的值,而 FieldB 只有 5 个。我最好不要:
【问题讨论】:
标签: mysql optimization indexing
我建议你在两个字段上都使用复合索引
index my_index_name on my_table(fieldA, fieldB)
在第一个位置使用 fieldA 或 FieldB 应该会以一种特别的方式改变性能..,但首选最有选择的第一个
【讨论】:
如果您使用的是WHERE A=(constant) AND B=(constant),那么INDEX(A,B) 和INDEX(B,A) 也同样适用。
但是...OR 搞砸了。 < 搞砸了。 IN 搞砸了。等等等等。
为WHERE ... AND ... 构建“最佳”索引的简短规则
= (constant) 收集所有列first。示例:WHERE A < 123 AND B = 987 可以从INDEX(B, A) 中受益最大按此顺序。
如果您在一个查询中有WHERE A=333,而在另一个查询中有WHERE B=777(没有AND'd),那么您需要两个索引,一个(A)(或开始 em> 与 A),以及与 B 类似的一个。INDEX(B, A) 将不对两者都有效。
【讨论】: