1

「LineItemsMap」テーブルが約 100 万行に増え、タイムリーにこのクエリを実行すると問題が発生します。私が作成できるインデックス、またはクエリを使用したより良いロジックに関する提案は大歓迎です。

    select 
      Id, 
      [Description],
      SUM(CASE WHEN t1.compliant = 1  THEN 1 ELSE 0 END) as Compliant,
      SUM(CASE WHEN t1.compliant = 0  THEN 1 ELSE 0 END) as NonCompliant,
      LastChecked 
from lineitems as t0
      left outer join lineitemsmap as t1 on t0.id = t1.lineitemid
      left outer join art_blob as t2 on t2.art_blob_id = t1.blobid
      left outer join art_asset as t3 on t3.art_asset_id = t2.art_asset_id
      left outer join lineitemexceptions as t4 on t4.assetid = t3.art_asset_id and t4.lineitemid = t1.lineitemid
where t0.active = 1 and t4.assetid is null
group by t0.id, t0.[description], t0.lastchecked

XML で保存された実行計画への リンクは次のとおりです: http://codepaste.net/5xcpcw テーブル構造へのリンクは次のとおりです: http://codepaste.net/pnqx6e

4

1 に答える 1

2
  1. アクティブは広告申込情報でインデックス化する必要があります
  2. LineItemId は LineItemsMap でインデックス化する必要があります
  3. AssetId は LineItemExceptions でインデックス化する必要があります
  4. art_asset_id は art_blob でインデックス化する必要があります

私は他の人を見ませんでした。結合に使用されるすべてのフィールドには、常にインデックスを付ける必要があります。where句からフィールドにインデックスを付けることも大いに役立ちますが、インデックスが多すぎることに注意する必要があります。

于 2012-10-22T17:02:47.877 に答える