300 件未満の結果を返す次のクエリがあります。現在、完了までに約 4 秒かかっています。実行計画を見ると、クラスター化インデックス スキャンに 41% のリソースが費やされていることがわかります。データベース管理に関する私の知識は限られているため、クラスター化されたインデックスのシークによってパフォーマンスが向上することが示唆されています。クラスター化インデックス スキャンの代わりにクラスター化インデックス シークを使用するクエリを取得するにはどうすればよいですか? 以下は、関連情報とクエリです。
- Sql サーバー 2008 R2
- テーブル PMDME は約 140,000 行 (これはリソースの 41% を占めている行です)
- サーバー ハードウェア: 16 コア 2.7gz プロセッサ、48GB RAM
DECLARE @開始日、@終了日 SET @start = '2013-01-01' SET @end = CAST(GETDATE() AS DATE) 選択する b.合計、 c.摂取量、 d.船、 a.CODE_、 RTRIM(a.NAME_) を名前として、 f. 営業担当者としての従業員、 g.referral_type_id、 h.referral_type、 e.slscode、 街、 状態_、 a.zip PACWARE.ADS.RFDME から 左外部結合 ( SELECT SUM(b.quantity) total, a.ref_id from event.dbo.sample a JOIN event.dbo.sample_parts b on a.id = b.sample_id b.part_id = c.CODE_ で PACWARE.ADS.PTDME c に参加 WHERE c.MEDICAREID = 'E0607' AND @start と @end の間の a.order_date GROUP BY a.ref_id )b on a.CODE_ = b.ref_id 左外部結合 ( SELECT COUNT(a.CODE_) を取り込み、rfcode として FROM PACWARE.ADS.PMDME a WHERE a.REGDATETIME BETWEEN @start と @end 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_ の LEFT OUTER JOIN PACWARE.ADS.PTDME B LEFT OUTER JOIN event.dbo.newdate() D ON A.ACCOUNT=D.ACCOUNT LEFT OUTER JOIN event.dbo.newdate_extras() D2 ON A.ACCOUNT=D2.ACCOUNT WHERE A.BILLDATETIME>=@start AND A.BILLDATETIME=@start AND D.NEWDATE=@start AND D2.NEWDATE'ID' グループ化 A.アカウント、 B.MEDICAREID、 A.カテゴリー ) a.CODE = b.CODE_ で PACWARE.ADS.PMDME b に参加 GROUP BY b.RFCODE ) d on a.CODE_ = d.rfcode LEFT OUTER JOIN event.dbo.employee_slscode e on a.SLSCODE = e.slscode JOIN event.dbo.employee f on e.employee_id = f.id JOIN event.dbo.referral_data g on a.CODE_ = g.CODE_ JOIN event.dbo.referral_type h on g.referral_type_id = h.id WHERE 合計 > 0