【发布时间】:2014-05-06 17:58:29
【问题描述】:
假设我有 2 个存储过程和 1 个表。
- 表名:
Table_A - 程序名称:
proc1和proc2
当我使用执行计划运行proc1 时,它建议我为tblID(不是主键)列创建Table_A 的索引,并建议包括column_A 和column_B。
proc2 建议再次为Table_A 创建索引,用于tblID 列,但这次它建议包含column_B 和column_C(它建议column_C 而不是column_A这个过程)
所以我的问题是,如果我创建了一个包含所有建议列的索引,例如:
CREATE NONCLUSTERED INDEX indexTest
ON [dbo].[Table_A] ([tblID])
INCLUDE ([column_A],[column_B],[column_C])
这会导致任何性能问题吗?
收集INCLUDE 列有什么缺点吗?
或者我应该创建 2 个不同的索引:
CREATE NONCLUSTERED INDEX indexTest_1
ON [dbo].[Table_A] ([tblID])
INCLUDE ([column_A],[column_B])
CREATE NONCLUSTERED INDEX indexTest_2
ON [dbo].[Table_A] ([tblID])
INCLUDE ([column_B],[column_C])
更新:我想为这个问题再补充一件事。
如果我也对主要字段做同样的事情:
我的意思是,
proc-1 建议在 tblID 字段上创建索引。 proc-2 建议在tblID 和column_A 上创建索引。
如果我将它们收集为:
CREATE NONCLUSTERED INDEX indexTest_3
ON [dbo].[Table_A] ([tblID],[column_A])
INCLUDE ([[column_B])
这会导致性能问题吗?还是应该为建议的主字段创建 2 个单独的索引?
【问题讨论】:
标签: sql-server sql-server-2008 indexing