-1

このページ(http://www.storeboard.com/directory/california/sanfrancisco/ )を見ると、ロードに30秒以上かかる可能性があるため、実際にはアクセスできないページが見つかります。理由は、各カテゴリーのビジネスメンバーの数を数えるカウンターがあるからです。現在、100万人を超えるメンバーがいて、現在の状態のスクリプトは役に立たないため、既存のスクリプトを高速化する方法があるかどうかを知りたいです。これが私の現在のスクリプトです:

SELECT COUNT(MemberID) AS MembersInCountyCat
FROM Member
WHERE NYKACountyID = @NYKACountyID
AND (
        NYKACatID IN (
            SELECT NYKACatID
            FROM NYKACat
            WHERE ParentID = @NYKACatID
        )
        OR
        NYKACatID = @NYKACatID
    )
AND ProfileTypeID <> 1

SQLスクリプトを高速化する方法についてのアドバイスをいただければ幸いです。

よろしくお願いします。

ネオジャキー

4

2 に答える 2

1

これを試してみてください。NYKACatの条件を参加に移すことはそれを助けるかもしれません、そして私はそれがそれを傷つけることができるとは思いません。NYKACat.ParentID=@NYKACatIDまたはNYKACat.NYKACatID=@NYKACatIDがNYKACatからほとんどの行を削除する場合、それを前もって行うことができます。

with(nolock)は、ダーティ読み取り
を受け入れることができない場合にダーティ読み取りを許可し、それを削除します

SELECT COUNT(Member.MemberID) AS MembersInCountyCat
FROM  Member  with (nolock) 
JOIN  NYKACat with (nolock)
  on  NYKACat.NYKACatID = Member.NYKACatID
 and (NYKACat.ParentID = @NYKACatID or NYKACat.NYKACatID = @NYKACatID)
WHERE Member.NYKACountyID = @NYKACountyID
  and Member.rofileTypeID <> 1
于 2012-09-20T19:05:49.367 に答える
0
SELECT COUNT(MemberId) AS MembersInCountyCat
FROM Member
    INNER JOIN NYKACat ON Member.NYKACatId = NYKACat.NYKACatId 
WHERE NYKACountyId = @NYKACountyId
    AND (NYKACat.NYKACatId = @NYKACatId OR NYKACat.ParentId = @NYKACatId)
    AND ProfileTypeId <> 1

ProfileTypeID、Member.NYKACountyId、およびMember.NYKACatIdにインデックスがあることを確認してください。

于 2012-09-20T18:28:09.880 に答える