【发布时间】:2011-07-25 13:03:36
【问题描述】:
我目前正在研究一个广泛使用的 .NET CMS 系统的性能问题,并且有一个包含大约 5,000,000 条记录的特定表,这是这些问题的根本原因,仅查询该表的内容需要2 分钟了解我的本地开发环境。
查看表的架构,我注意到只有一个唯一的非聚集索引,没有聚集索引。
表和索引定义如下
CREATE TABLE [dbo].[MyTable](
[Id] [uniqueidentifier] NOT NULL,
[ItemId] [uniqueidentifier] NOT NULL,
[Language] [nvarchar](50) NOT NULL,
[FieldId] [uniqueidentifier] NOT NULL,
[Value] [nvarchar](max) NOT NULL,
[Created] [datetime] NOT NULL,
[Updated] [datetime] NOT NULL
)
CREATE UNIQUE NONCLUSTERED INDEX [IX_Unique] ON [dbo].[MyTable]
(
[ItemId] ASC,
[Language] ASC,
[FieldId] ASC
)
是否有人对此表上的索引有任何建议以提高查询性能,特别是,始终在表上定义聚集索引通常是一种好习惯吗?
谢谢
【问题讨论】:
-
为了建议哪些索引会有所帮助,我们需要知道您是如何访问该表的。你对它执行了哪些查询?
-
对于任何“正常”数据表 - 是的,我总是推荐一个 good 聚集索引(在一个狭窄、稳定、唯一且最好是不断增加的列上)。这可能不适用于临时表,例如用于临时表的表。批量插入等等 - 但其他任何事情都可以从良好的聚集索引中受益,是的
标签: sql-server performance indexing