是否有订购MYSQL综合指数的最佳方法是什么?

问题描述 投票:14回答:1

我期待到在MySQL数据库中,这将有可能会在大小数百万行增加一个综合指数表。复合材料将包括两个VARCHAR列以及3个int的列。我的问题是在标题中说:有一个最佳的顺序来创建此综合指数?例如,INT行的一个很可能只有6个可能的值,将它为该列更好地接近索引定义的前面?同样,VARCHAR列将可能有百万个不同值中的一个,应该说是正面或索引定义的后面靠近?

mysql indexing composite-index
1个回答
28
投票

作为一个经验法则,在多列索引,你要具有最高基数,或者换句话说,不同值的最高数量,是第一位在索引中的列。

为了更准确,你想用尽可能少的匹配列到你的搜索条件的第一,所以你可以缩小结果集下来尽可能,但总的来说,这是一样的最高基数。

所以,在你的榜样,你会想,这将有几百万不同的值是在索引中的一个,只有6个不同值之前的列。

假设你选择只有一个排出来的数以百万计值的,它可以让你消除更多的行更快。

当考虑类似基数的两列,把一个小的第一(整数列VARCHAR列前),因为MySQL可以比较快迭代他们。

一个需要注意的是,如果你是一个范围(例如,WHERE datecol > NOW())选择,那么你想要的范围栏最右边,你的列有一个恒定的(如WHERE id = 1)左侧。这是因为你的索引只能用于搜索和订购到第一个范围值的点。

© www.soinside.com 2019 - 2024. All rights reserved.