我期待到在MySQL数据库中,这将有可能会在大小数百万行增加一个综合指数表。复合材料将包括两个VARCHAR列以及3个int的列。我的问题是在标题中说:有一个最佳的顺序来创建此综合指数?例如,INT行的一个很可能只有6个可能的值,将它为该列更好地接近索引定义的前面?同样,VARCHAR列将可能有百万个不同值中的一个,应该说是正面或索引定义的后面靠近?
作为一个经验法则,在多列索引,你要具有最高基数,或者换句话说,不同值的最高数量,是第一位在索引中的列。
为了更准确,你想用尽可能少的匹配列到你的搜索条件的第一,所以你可以缩小结果集下来尽可能,但总的来说,这是一样的最高基数。
所以,在你的榜样,你会想,这将有几百万不同的值是在索引中的一个,只有6个不同值之前的列。
假设你选择只有一个排出来的数以百万计值的,它可以让你消除更多的行更快。
当考虑类似基数的两列,把一个小的第一(整数列VARCHAR列前),因为MySQL可以比较快迭代他们。
一个需要注意的是,如果你是一个范围(例如,WHERE datecol > NOW()
)选择,那么你想要的范围栏最右边,你的列有一个恒定的(如WHERE id = 1
)左侧。这是因为你的索引只能用于搜索和订购到第一个范围值的点。