-2

こんにちは、SQL Server 2008 を使用しています。データベースには というテーブルが 1 つありますMemberBusiness。そのテーブルからデータを取得したい。

これは私のストアドプロシージャです

SELECT    BrokerId ,
          RankId ,
          MemberId ,
          InstallmentId ,
          PlanId ,
          IntroducerId ,
          Date ,
          SelfAmount ,
          UnitAmount ,
          SpotAmount ,
          ORBPercentageSelf ,
          ORBPercentageUnit ,
          ORBAmountSelf ,
          ORBAmountUnit ,
          IsSelfBusiness ,
          Mode ,
          InstallmentNo ,
          PlanType ,
          PlanName ,
          CompanyId ,
          CscId ,
          Year ,
          CreateDate ,
          ModifideDate
FROM      dbo.MemberBusiness AS mb
WHERE     ( @CscId = 0
            OR mb.CscId = @CscId
          )
          AND ( @CompanyId = 0
                OR CompanyId = @CompanyId
              )
          AND BrokerId IN ( SELECT    bt.BrokerId
                            FROM      #brokerTable AS bt )
          AND mb.Date >= @StartDate
          AND mb.Date <= @EndDate
          AND mb.RankId >= @FromRankId
          AND mb.RankId <= @ToRankId

テーブルには、MemberBusiness約 16560352 のレコードがあります。SP を超えると 1300 レコードが得られ、実行に約 30 秒かかりますが、これは私には受け入れられません。インデックス作成を使用しましたが、実行に時間がかかります。どうすればこれをより速く行うことができますか?. ありがとう。

4

4 に答える 4

-2

これはすべて、チューニングとスケーラビリティに関するものです。

フリスト: クエリ アナライザーでステートメントをチェックし、インデックスと統計を作成します。使用されていないインデックスを削除することを忘れないでください。データに最適にアクセスできるように、where 句を再配置してみてください。QA を使用してインデックスと統計を作成することもできます。

テーブルの分割について考えてみてください。

それでも遅い場合は、ハードウェアで考えてください。ボトルネックを見つけて、より多くの RAM を使用し、より大きな CPU または CPU を使用し、いくつかの SSD を入手して、ネットワークを高速化します。クラスタ内で負荷を共有してみてください。

于 2013-10-04T11:42:51.103 に答える