2016-07-04 2 views
3

に参加します。製品は複数のカテゴリーに分類できます。 CwObject(製品)とEntityObjectLink(製品とカテゴリ間のリンク):だから私は2つのテーブルを持っています。私はたくさんそれでも、それはひどく遅いですtweekingの日後に使用されている1つのクエリを持っています。 CwObjectには約400Kのレコードがあり、EntityObjectLinkには1.2Mのレコードがあります。ひどく遅いクエリは、私が製品とカテゴリを持っている私のアプリケーションでは

これはクエリです:

SELECT TOP (99999) 
    CwObject.* 
FROM 
    CwObject 
INNER JOIN 
    dbo.EntityObjectLink ON CwObject.CwObject_Guid = EntityObjectLink.EntityObjectLink_LinkedCwObject_Guid 
WHERE 
    EntityObjectLink_LinkedCwEntity_Guid = '9a0e41d7-a472-445e-b94f-44fe1a1506b3' 
    AND CwObject_CwSiteCluster_Guid = '0f178176-9720-41c7-9528-99fdf30005e8' 
    AND CwObject_EntityType = 1 
    AND (CwObject_Predecessor_Guid IS NULL) 
ORDER BY 
    CwObject_Name ASC 

EntityObjectLinkは、関連するクラスタ化インデックスを持っている:私は、クエリを使用している場合

NONCLUSTERED INDEX [IX_ClusterEntitytypePredecessorStatusClusteraccount] 
ON [dbo].[CwObject]([CwObject_CwSiteCluster_Guid] ASC, 
        [CwObject_EntityType] ASC, 
        [CwObject_Predecessor_Guid] ASC, 
        [CwObject_Status] ASC, 
        [CwObject_ClusterAccount_Guid] ASC) 
INCLUDE (% ALL other columns%) 
     WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
      SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, 
      ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 

PRIMARY KEY CLUSTERED ([EntityObjectLink_LinkedCwEntity_Guid] ASC, 
         [EntityObjectLink_LinkedCwObject_Guid] ASC) 
     WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
      SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, 
      ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 

CwObject表は、関連するインデックスを持っていますオプティマイザは、クエリが両方のインデックスを使用していることを伝えます。しかし、私は物事のカップルは、私は理解していない参照してください。これは、エンティティタイプとpredecessorguidための列統計が存在しないことを私に警告し

  1. 。私はちょうどインデックスを追加したのでそれはできますか?

  2. CwObjectsテーブルに読み取る実際と推定行との間の大きな違いがあります。

私はライブクエリ統計を見てみると、クエリがインデックスにCwObjectsに171Kのレコードを読み取り、シーク(求める理由は?)。そして、マージは、それが2.5Kレコードを読み取りEntityObjectLinkテーブルに参加しません。それを逆にする方がはるかに効果的でした。

私は本当に、本当にここに立ち往生しています...誰が助けることはできますか?ここで

は、実行計画である:https://1drv.ms/u/s!AlCbN2sexrJ-hNJjeSR9cZPOEpOHww

UPDATE:

AtoStats、ON古い数時間です。

ほぼすべての時間は、インデックスで消費される... CwObjectに

UPDATE 2模索:

を私はcwObjectsテーブルの上に更新するために、統計を余儀なくされました。これは大きな違いをもたらしました!クエリはほぼ10倍高速です!

+0

( 'EntityObjectLink_LinkedCwEntity_Guid、CwObject_CwSiteCluster_Guid')に複合インデックスを持ち、もう1つには' CwObject_Name'を改良するかもしれません。 –

+0

実行計画を投稿してください – TheGameiswar

+0

最初のキー列の後にCwObjectのクラスタードインデックスにCwObject_Guidを追加しようとしましたか? –

答えて

4

あなたは、したがって、あなたの実行計画では、この警告を取得し、列のいくつかの統計を持っていない:統計のない

列:。 [compareware]を[DBO] [CwObject]。 CwObject_EntityType; [compareware]。[DBO]。[CwObject]行の推定数が1779,2あった。これは174480の行の実際の数をもたらす

を.CwObject_Predecessor_Guid。

auto create statisticsをデータベースで有効にするか、手動でこれらの列の統計を作成してみてください。

+0

自動作成統計が有効でした。しかし、私はそれらを手動で作成しなければなりませんでした。巨大な違いを作りました(10倍速い)。 –

関連する問題