我在数据库中有一个表,它将从一开始就生成,可能永远不会再写入。即使它被写入,它也将以发布期间运行的批处理过程的形式出现,并且写入时间根本不重要。
这是一个相对较大的表,大约有8万行,大约10到12列。
应用程序可能经常从此表中检索数据。
我在想,因为它永远不会被写入,我应该只在所有列上放置索引吗?这样,无论我形成什么类型的查询,它总是会快速阅读?
这是个好主意吗?我应该注意到这有什么缺点吗?
答案 0 :(得分:0)
我的理解是每个索引确实需要一些(相对少量的)存储空间。如果你对空间太紧,这可能很重要。这可能会产生多大影响可能取决于您使用的是哪个数据库。
答案 1 :(得分:0)
这将取决于表格。如果所有列都将用于搜索条件,则将索引全部放入其中并不是不合理的。但这是不太可能的。此外,可能存在复合(多列)索引,这些索引比某些简单(单列)索引更有用。
最后,在评估回答查询的方式时,查询优化器必须检查表中存在的所有索引。很难说这成为可衡量的开销,但更多的索引需要更多的时间。
因此,考虑到您所描述的表的静态特性,对它进行索引比使用更动态的表更为合理是合理的。索引每一列可能都不合理。仔细选择要添加的复合索引也很重要。
答案 2 :(得分:0)
根据您针对该表运行的查询选择表的索引。
任何查询都不需要的索引只是浪费空间。
每列上的各个索引不是可能的完整索引集。您还可以创建多列索引(即复合索引),这些对于优化某些查询非常重要。复合索引中列的顺序很重要。
SQL Server 2008每个表仅支持999个非聚簇索引,因此如果您尝试在多个列的表上创建所有可能的索引,您将达到限制。
抱歉,您实际上需要先了解一些事情,然后才能进行有效优化。如果只是索引每一列的问题,那么RDBMS默认会这样做。