sql >> データベース >  >> RDS >> Sqlserver

SQL ステートメント - インデックス作成で速度を向上させる方法

    このインデックスはおそらく役立つでしょうが、フリー ランチがないことに注意してください (インデックスは維持する必要があるため、挿入/更新/削除のワークロードに影響します):

    CREATE NONCLUSTERED INDEX unread_emails
      ON dbo.MemberMail(ToMemberID)
      INCLUDE (MemberMailID)
      WHERE ToReadFlag = 0
      AND ToDeletedFlag = 0
      AND FromDeletedFlag = 0
      AND OnHold = 0
      AND ToArchivedFlag = 0;
      

    これで、クエリは次のようになります:

    SELECT TOP (1) MemberMailID
      FROM dbo.MemberMail -- dbo prefix
        WITH (INDEX (unread_emails)) -- in case you need to force, though you should not
    WHERE ToMemberID = 102
    AND ToReadFlag = 0
    AND ToDeletedFlag = 0
    AND FromDeletedFlag = 0
    AND OnHold = 0
    AND ToArchivedFlag = 0
    ORDER BY ToMemberID; -- ORDER BY is important!
      

    クエリに応じてこれらのフラグの値を変更する場合は、フィルターではなくインデックスのキーにそれらの列を追加してみてください。 OnHold = 0 をチェックすることがあるとしましょう そして時々 OnHold = 1 :

    CREATE NONCLUSTERED INDEX unread_emails
      ON dbo.MemberMail(ToMemberID, OnHold)
      INCLUDE (MemberMailID)
      WHERE ToReadFlag = 0
      AND ToDeletedFlag = 0
      AND FromDeletedFlag = 0
      AND ToArchivedFlag = 0;
      

    MemberMailID を使って実験することもできます INCLUDE の代わりにキーに .例:

    CREATE NONCLUSTERED INDEX unread_emails
      ON dbo.MemberMail(ToMemberID, MemberMailID)
      WHERE ToReadFlag = 0
      AND ToDeletedFlag = 0
      AND FromDeletedFlag = 0
      AND OnHold = 0
      AND ToArchivedFlag = 0;
      

    これらの違いは、データや使用パターンにとって重要ではないかもしれませんが、私たちが推測できるよりも簡単に違いをテストすることができます.



    1. MySQLのURL、ホスト、ポート、およびユーザー名を確認するにはどうすればよいですか?

    2. Perldbiprepareが間違った引用符を入れています

    3. MySQLでXML文字列を解析します

    4. TypeORM PostgreSQLは、JSONフィールドがある値と等しい場所を選択します