假设我
我应该创建哪些索引,并且以不同的顺序创建具有相同列的多个索引是一个可怕的想法?
(a,b)
(a,c)
(a,b,c)
(a,c,b)
...
(a,b,c,d)
(a,d,c,b)
...
答案 0 :(得分:5)
理论上,如果您完全不关心更新/插入速度和过多的索引大小(磁盘空间),那么您将需要查询的WHERE
子句中使用的所有可能的列组合,以及查询计划程序将决定使用哪一个。但是索引是否有用取决于表格数据。
索引列的顺序起着非常重要的作用。列应按基数排序。让我们来看看这个例子:
我们有一张人(id,姓,名字,年份,性别)的表格。 这里适合哪些指标?
我们应该添加哪个索引 - (姓,名)或(名字,姓)?正确的答案是(姓氏,名字),因为如果按姓氏对记录进行分组,肯定会有更多的记录。
我们说我们已经有了(姓氏,名字)索引。 我们应该改为(姓,名,年)吗?可能会有一些好处,但我对此表示怀疑。对于任何给定的姓氏和名字,可能只有几个不同年龄的记录。关键是如果我们有几乎唯一的组合(如姓氏+名字),那么在索引中添加更多列将不会有多大帮助(如果有的话)。
不需要索引。因为只有两个可能的值:男/女。所以指数效率不高。
除了索引是伟大的和必不可少的,我还要注意一些事项:
文档中的一个好点:Combining Multiple Indexes
除了最简单的应用程序之外,还有各种可能有用的索引组合,数据库开发人员必须进行权衡以决定提供哪些索引。有时多列索引是最好的,但有时创建单独的索引并依赖索引组合功能会更好。
答案 1 :(得分:0)
这个问题目前尚无法解决。影响指数选择和有用性的因素包括:
尽管如此,了解你的索引将如何执行的唯一方法是使用代表性数据进行测试。 对不起,这里没有捷径。