将索引放在只读表的所有列上

时间:2011-07-25 13:46:58

标签: database sql-server-2008 indexing

我在数据库中有一个表,它将从一开始就生成,可能永远不会再写入。即使它被写入,它也将以发布期间运行的批处理过程的形式出现,并且写入时间根本不重要。

这是一个相对较大的表,大约有8万行,大约10到12列。

应用程序可能经常从此表中检索数据。

我在想,因为它永远不会被写入,我应该只在所有列上放置索引吗?这样,无论我形成什么类型​​的查询,它总是会快速阅读?

这是个好主意吗?我应该注意到这有什么缺点吗?

3 个答案:

答案 0 :(得分:0)

我的理解是每个索引确实需要一些(相对少量的)存储空间。如果你对空间太紧,这可能很重要。这可能会产生多大影响可能取决于您使用的是哪个数据库。

答案 1 :(得分:0)

这将取决于表格。如果所有列都将用于搜索条件,则将索引全部放入其中并不是不合理的。但这是不太可能的。此外,可能存在复合(多列)索引,这些索引比某些简单(单列)索引更有用。

最后,在评估回答查询的方式时,查询优化器必须检查表中存在的所有索引。很难说这成为可衡量的开销,但更多的索引需要更多的时间。

因此,考虑到您所描述的表的静态特性,对它进行索引比使用更动态的表更为合理是合理的。索引每一列可能都不合理。仔细选择要添加的复合索引也很重要。

答案 2 :(得分:0)

根据您针对该表运行的查询选择表的索引。

任何查询都不需要的索引只是浪费空间。

每列上的各个索引不是可能的完整索引集。您还可以创建多列索引(即复合索引),这些对于优化某些查询非常重要。复合索引中列的顺序很重要。

SQL Server 2008每个表仅支持999个非聚簇索引,因此如果您尝试在多个列的表上创建所有可能的索引,您将达到限制。

抱歉,您实际上需要先了解一些事情,然后才能进行有效优化。如果只是索引每一列的问题,那么RDBMS默认会这样做。