我有以下查询返回 < 300 个结果。目前完成大约需要 4 秒,当我查看执行计划时,它显示它在聚集索引扫描上花费了 41% 的资源。我对数据库管理的有限了解表明,聚集索引查找会提高性能。如何让查询使用聚集索引查找而不是聚集索引扫描?以下是相关信息和查询。
- Sql Server 2008 R2
- 表 PMDME 大约 140,000 行(这是占用 41% 资源的行)
- 服务器硬件:16 核 2.7gz 处理器,48gb 内存
声明@开始日期,@结束日期 SET @start = '2013-01-01' SET @end = CAST(GETDATE() 作为日期) 选择 b.总计, c.摄入量, d.船舶, a.CODE_, RTRIM(a.NAME_) 作为名称, f. 雇员作为销售员, g.referral_type_id, h.referral_type, e.slscode, 一座城市, 一个状态_, 一个.zip 来自 PAWARE.ADS.RFDME 左外连接 ( SELECT SUM(b.quantity) total, a.ref_id from event.dbo.sample a 在 a.id = b.sample_id 上加入 event.dbo.sample_parts b 在 b.part_id = c.CODE_ 上加入 PAWARE.ADS.PTDME c 其中 c.MEDICAREID = 'E0607' AND a.order_date 在 @start 和 @end 之间 按 a.ref_id 分组 )b 上 a.CODE_ = b.ref_id 左外连接 ( 选择 COUNT(a.CODE_) 作为摄入量,rfcode 来自 PAWARE.ADS.PMDME @start 和 @end 之间的 a.REGDATETIME GROUP BY a.RFCODE ) c on a.CODE_ = c.rfcode 左外连接 ( 选择 COUNT(a.CODE) 作为船舶,b.rfcode 从 ( 选择 A.帐户代码, MIN(CAST(A.BILLDATETIME AS DATE)) AS SHIPDATE 来自 PACWARE.ADS.ARODME A 在 A.PTCODE=B.CODE_ 上左外连接 PACWARE.ADS.PTDME B 左外连接 event.dbo.newdate() D ON A.ACCOUNT=D.ACCOUNT 左外连接 event.dbo.newdate_extras() D2 ON A.ACCOUNT=D2.ACCOUNT A.BILLDATETIME>=@start AND A.BILLDATETIME=@start AND D.NEWDATE=@start AND D2.NEWDATE'ID' 通过...分组 A.帐户, B.医疗保险, A.类别 ) 一种 在 a.CODE = b.CODE_ 上加入 PAWARE.ADS.PMDME b 按 b.RFCODE 分组 ) d on a.CODE_ = d.rfcode 左外连接 event.dbo.employee_slscode e on a.SLSCODE = e.slscode 在 e.employee_id = f.id 上加入 event.dbo.employee f 在 a.CODE_ = g.CODE_ 上加入 event.dbo.referral_data g 在 g.referral_type_id = h.id 上加入 event.dbo.referral_type h 总计 > 0