【发布时间】:2009-10-19 16:49:12
【问题描述】:
这两个涵盖的索引有什么区别吗?
- 同时包含 FriendID 和 UserID 的复合索引
- 以 FriendID 和 UserID 作为包含列的索引
单独的 MS SQL Server 相关点。如果上述问题的答案是“没有区别”,是我还是数据库引擎优化顾问 (DTA) 总是对包含的列发疯?
【问题讨论】:
标签: sql sql-server tsql indexing
这两个涵盖的索引有什么区别吗?
单独的 MS SQL Server 相关点。如果上述问题的答案是“没有区别”,是我还是数据库引擎优化顾问 (DTA) 总是对包含的列发疯?
【问题讨论】:
标签: sql sql-server tsql indexing
是的,它们是不同的。
差异意味着 (A,B) 上的索引比 (A) 上的索引包含 (B) 上的索引更宽,因此它们包含更多的非叶子页面,生成更大的索引(更多页面),更多的 IO,因此效率更低.
但是,索引 (A,B) 将始终 覆盖索引 (A) 包括 (B)。因此,如果您已经在 (A,B) 上建立了索引,并且 Tunning Advisor 建议在 (A) 包含 (B) 上建立一个新索引,那么有些事情是有问题的。要么使用 DTA 建议,要么使用您对现有索引的分析。无意冒犯,但在这种情况下,我倾向于相信 DTA 而不是人工分析,因此请确保您确实拥有已经涵盖 DTA 建议的索引,包括顺序和过滤器(对于 SQL 2008)。
【讨论】: