ima*_*mak 5 sql-server indexing
如果我在表上创建非聚集索引,SQL服务器是否会在该表中复制数据并将其单独存储?我只想考虑创建非聚集索引的成本.我猜选择索引中使用的密钥会更快,但所有插入,更新和删除都会很慢,因为sql server必须维护两个数据副本.我的理解是否正确?
SQL Server不会复制表中的所有数据,只包含索引列和任何"覆盖"列中包含的数据,以及其他开销数据.
是的,插入/更新会稍微慢一些,但是由于没有选择索引而可能导致的成本远远超过这个.在大多数情况下,除非您每秒插入数百/数千行,否则您可能不会通过在表上具有适当数量的索引来注意对插入/更新的太多影响.
我们尝试限制生产数据库中的索引,但在报告数据库上使用更多的索引,这些索引从我们的生产数据库中复制.不会注意到在报告数据库上有许多索引(用于插入/更新)的开销.
对于非聚集索引,数据不会被“复制”。创建排序的“映射”(有时仅使用索引列的完整副本)是为了使该字段上的某些查询的查找速度更快。对于这一点的基本准则,请考虑 B 树 http://en.wikipedia.org/wiki/B-tree ,其中不同的节点位于众所周知的位置,并且您可以根据查询确定,开始寻找。是的,您需要花费一些资源来创建/维护地图……但是您在搜索上花费了多少时间?
SQL Server 中聚集索引和非聚集索引之间最根本的区别在于,聚集索引描述了磁盘上行的物理存储顺序……这就是为什么顺序聚集索引通常是获得良好插入性能的首选。
另一方面,对于非聚集索引,您需要衡量搜索性能的重要性与插入性能/磁盘空间的成本。我通常会在任何常用搜索字段上使用索引。如果同一个字段有非常频繁的插入,它会变得有点复杂,但我个人从来没有不得不处理插入性能说服我不要使用索引。