Gen*_*нин 8 sql-server indexing performance database-design clustered-index
评论"如何减少简单选择查询的响应时间?" 告诉:
"LaunchDate上的数据类型是什么?如果DATETIME或DATETIME2是DATETIME或DATETIME2,则索引不太可能做多,因为它们包含时间部分 - OMG Ponies"
"@OMG - 为什么DateTime列上的Clustered Index不能提高性能?查询是一个范围扫描,它允许快速索引查找,因为所有数据都在顺序块中?半相关... msdn. microsoft.com/en-us/library/ms177416.aspx - 卡尔加里编码器"
"Calgary Coder:DATETIME/2包括时间 - 一个索引,无论是聚簇的还是非聚集的,对于重复次数而不是范围的日期都是有用的. - OMG Ponies"
我在DATETIME类型列上创建了一个带有聚簇索引的测试表,LaunchDate并观察索引查找类似于上述问题中引用的查询:
SELECT COUNT(primaryKeyColumn) 
FROM   MarketPlan 
WHERE  LaunchDate > @date
而不是表或索引扫描.
为什么DateTime列上的聚簇索引不会提高性能?
为什么索引不是可能做得太多,如果它DATETIME或DATETIME2因为它们包括时间部分?
我很欣赏一个脚本,说明DATETIME列的索引不会提高性能.  
更新:另外,OMG没有暗示对指数DATE型列将是有益的,但不DATETIME和DATETIME2?  
我读过另一个问题,不知道 OMG 小马是什么意思
3分:
寻找或扫描:
根据统计数据,如果LaunchDate > @date意味着 90% 的行,那么很可能会发生扫描。如果它是非常有选择性的,那么寻找的可能性就更大。
不管集群还是非集群!
什么指数?
像这样的查询需要 LaunchDate 和 PrimaryKeyColumn 上的索引
SELECT COUNT(primaryKeyColumn) 
FROM   MarketPlan 
WHERE  LaunchDate > @date
现在,任何非聚集索引都是指默认情况下假定为 PK 的聚集索引。因此,primaryKeyColumn 已经隐式包含在内。
迷信
不过,COUNT(primaryKeyColumn) 是一种迷信。因为 PK 不允许 NULL,所以相当于
SELECT COUNT(*) 
FROM   MarketPlan 
WHERE  LaunchDate > @date
SELECT COUNT(1) 
FROM   MarketPlan 
WHERE  LaunchDate > @date
因此,您只需要 LaunchDate 上的索引,无论是集群索引还是非集群索引
| 归档时间: | 
 | 
| 查看次数: | 8411 次 | 
| 最近记录: |