2009-12-21 63 views
1

当为特定查询创建索引时,最好将where子句中的所有列索引,然后在“包含的列”部分中选择任何列?我应该离开索引的位列吗?SQL Server索引问题

回答

1

经典 “这取决于” 的位。如果你包含它们,那么你正在创建一个覆盖索引,这将会更加有效,但同样的,你会因行插入,删除和一些更新而受到惩罚。

您还要为磁盘空间付出代价,因此如果要在大型表中包含非常宽的列,则需要平衡存储开销与性能增益的增加。

所有的事情都是平等的,覆盖指数通常是一件好事,但有些警告,如其他操作的空间和开销需要注意。

+0

在这个特定的数据库中,插入/更新/删除操作只能在半夜每天执行一次,所以我愿意对该性能产生影响。知道它看起来像是一个覆盖指数将是当时的路? – 2009-12-21 17:49:05

+0

听起来更像是DW或Hybrid,而不是纯OLTP,因此覆盖索引可能对您有利 - 但它确实是YMMV。 – Andrew 2009-12-21 19:17:08

+0

是的,这是一个DW。因人而异? – 2009-12-22 07:02:47