0
海兰家伙,簇索引的小桌子
我继承了下表和数据库只有200行:
CREATE TABLE [MyTable](
[Id] [uniqueidentifier] NOT NULL,
[Name] [varchar](255) NULL,
[Value] [varchar](8000) NULL,
[EffectiveStartDate] [datetime] NULL,
[EffectiveEndDate] [datetime] NULL,
[Description] [varchar](2000) NOT NULL DEFAULT (''),
CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]
正如你可以看到有一个群集的PK上唯一标识符列。我在做一些性能检查,到目前为止(CPU和IO)最昂贵的查询如下:
SELECT @Result = Value
FROM MyTable
WHERE @EffectiveDate BETWEEN EffectiveStartDate AND EffectiveEndDate
AND [email protected]
上述查询被封装在一个UDF,通常的UDF不叫在选择列表中或在子句,而是它的返回通常被分配给一个变量。
执行计划显示了一个聚集索引扫描
我们的系统是基于在大量实时聚合和数学处理的。每次我们的Web应用程序刷新主页面时,都会调用一堆存储过程和UDF,上面的查询每个用户每次刷新运行约500次。
我的问题是:我应该将PK更改为非聚簇,并在这样一个小表中的Name,EffectiveStartDate,EffectiveEndDate上创建聚簇索引?
谢谢。这确实是我想象的。由于所有操作都是在数据库内完成的,因此我没有连接问题 –