在数据仓库中,对于事实表创建聚集索引是否存在缺点?(大多数情况下,将在datetime列上创建)
你会默认回答是或否吗?
如果我不应该默认创建聚集索引,那么为什么?(我知道聚集索引的优点,但有哪些缺点?)
参考资料
你会默认回答是或否吗?
如果我不应该默认创建聚集索引,那么为什么?(我知道聚集索引的优点,但有哪些缺点?)
参考资料
http://blogs.sqlserver.org.au/blogs/greg_linwood/archive/2006/09/11/365.aspx
http://blogs.sqlserver.org.au/blogs/greg_linwood/archive/2006/09/11/365.aspx
我建议在经常按特定值搜索的表(事务或仓库)上建立聚集索引。 聚集索引(或任何索引)的缺点是你正在创建占用空间的额外数据存储。 如果被索引的表很大,那么索引也会很大! 你拥有的索引数量越多,除数据库外,存储的数据就越多。 然而,如果你需要搜索速度,则可能需要索引以帮助提高速度。
但是,你也可以考虑在表的ID上创建聚集索引。 然后,在像Lucene(或Lucene.NET)这样的产品中创建数据库外的索引。 然后,你可以搜索Lucene索引(在搜索方面具有更灵活和功能丰富的特性),该索引将返回给定记录(或记录)的ID,然后你可以使用它来标识你需要在数据库中获取的数据。 这是我们在目前项目中经常使用的一种方法,我必须承认它非常实用! 创建索引要快得多(特别是与使用SQL Server中的全文选项相比)。 只是需要考虑一下。
我不喜欢说“总是”和“从不”,但我认为在大多数情况下,将聚集索引用于事实表是一个好的选择。不建议在插入具有随机值的列类型上创建聚集索引。例如,您不希望在GUID之类的东西上创建聚集索引。日期和顺序ID非常适合聚集索引,特别是对于范围查询。
你已经说明了你知道聚集索引的优点,但是缺点将取决于你如何使用它们,以确定它们是否对你有影响。
1.) 每个表只能有一个聚集索引,因为它会更改数据块的布局以匹配索引的顺序。这就是为什么聚集索引非常适合范围查询的原因。
2.) 因为数据块按索引的顺序排列,插入和更新会改变键的顺序,这可能导致对数据块进行物理修改,以使其与索引保持一致。按顺序插入键值可以减轻此缺点。
int(bigint)
主键聚集索引可以极大地简化分区操作;而且,早晚事实表也会到达这个点。因此,即使您现在认为可能不需要它,也要创建一个。