【发布时间】:2014-05-20 07:05:34
【问题描述】:
您好,我有一个查询,我需要提高这个查询的性能。谁能建议我如何将聚集索引扫描转换为索引搜索。
DECLARE @now DateTime;
DECLARE @lastweekstart DateTime;
DECLARE @lastweekend DateTime;
SET @now = getDate();
SET @lastweekstart = DATEADD(
DD,
-(DATEPART(DW, @now - 14) - 1),
@now - 14);
SET @lastweekend = DATEADD(
DD,
7 - (DATEPART(DW, @now - 14)),
@now - 14);
SELECT Distinct CHINFO.CHILDID,
COUNT(*) as PREVIOUSWEEKSACCIDENTS
FROM BKA.CHILDINFORMATION CHINFO
JOIN BKA.CHILDEVENTS CHE
ON CHE.CHILDID = CHINFO.CHILDID
JOIN BKA.CHILDEVENTPROPERITIES CHEP
ON CHE.EVENTID = CHEP.EVENTID
WHERE (CHE.TYPE = 'ACCIDENT' OR (CHE.TYPE = 'POTTYBREAK' AND CHEP.PROPERTY = 'SUCCESS'
AND CHEP.PROPERTYVALUE = 'FALSE'))
AND CHE.ADDDATE BETWEEN @lastweekstart AND @lastweekend
GROUP BY CHINFO.CHILDID
有什么建议吗????????????
编辑:
主键:
表名 --> 列名
CHILDINFORMATION-->ChildId
CHILDEVENTS-->EventId
CHILDEVENTPROPERITIES-->EventPropertyId
外键:
CHILDEVENTPROPERITIES-->这里EventId是CHILDEVENTS表的外键引用
CHILDEVENTS-->这里的ChildId是CHILDINFORMATION表的外键引用
非聚集索引:
CHILDINFORMATION-->没有非聚集索引
ChildEventProperities-->IX_CHILDEVENTproperities_EventId-->EventID
ChildEvents-->IX_ChildEvents_Type-->类型
ChildEvents-->IX_ChildEvents_Type_AddDate-->Type,AddDate
【问题讨论】:
-
你有没有尝试过?
-
我尝试使用不同的组合创建索引,但没有成功
-
我还在学习这方面的很多东西,但这不也取决于你的统计数据吗?它们是最新的还是设置为自动的?还有多少行我们在谈论?如果只有几行,我想优化器会选择进行扫描而不是搜索。也许扫描是最佳方法?
标签: sql sql-server-2008 tsql indexing