MySQL索引创建

4
我是一位有用的助手,可以为您进行文本翻译。以下是您需要翻译的内容:

我有一个包含10列的表格,我需要支持大多数列的组合范围筛选。

例如:

WHERE column_a >= a_min AND column_a <= a_max 
AND column_b >= b_min AND column_b <= b_max
...

但这还不够,我还需要支持按不同列对数据进行排序。

我的问题是,考虑到为了优化搜索可能要创建的索引组合非常多,我的可选选项是什么?

谢谢!


2
你唯一能做的就是创建N个单独的索引(每列一个)。不要把这作为答案,因为我想知道是否有其他替代方案。 - zerkms
@sebasuy,你预计你的表将容纳多少行?对于相对较小的表,性能可能会更好,当通过扫描表而不是通过索引访问时。 - user359040
@Mark,这个表将会有很多记录,我估计在600万到1000万之间。谢谢。 - sebasuy
2个回答

4
为每个列单独创建索引。让mysql自己来决定如何使用它们。
另外,顺便提一下,养成使用between运算符的习惯:
column_a between a_min AND a_max

而不是:

column_a >= a_min AND column_a <= a_max -- ugly and the semantic is not as obvious

使用这种方式,阅读和打字都更容易,而且功能完全相同。


我同意你的看法,但是我不同意你对'BETWEEN'的评论。对我来说,'=> '和'<= '比'BETWEEN'更明确。(我怀疑是否有人问过SO这个问题:'>= '和'<= '是否包括范围边界')。 - Kevin Burton
我同意Kevin的观点,它更加明确。感谢您的回答,+1。 - sebasuy
我不知道这个“between”运算符,你提到它让我非常高兴! - AsTeR

0

只要他对所有字段进行了不相等比较-根据您提供的链接,复合索引将无法工作(或者准确地说-仅使用索引的第一列)。 - zerkms

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接