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

遅いSQLクエリにWHERE...IN(...)を使用する代わりに

    もう一度笑うために、このクエリを試してみてください:

      select 
        [sID], 
        ROW_NUMBER() over (partition by [sID] order by [wordPos]) [rn], 
        [wordPos], [FTSindex].[wordID]
      from [FTSindex] 
      join ( 
        values (428), (2112)
      ) w (wordID) on w.wordID = [FTSindex].wordID
      order by [sID], [rn] 
    

    場合によっては、問題に対してより多くのハードウェアを投入することが正解です。私はこれが最初ではなく最後の手段であるべきだということに同意しますが。この特定の問題がより多くのCPU、より多くのメモリ、またはより多くのスピンドルを必要とするかどうかは、現在のハードウェアを含む多くの要因に依存します。

    それぞれ4つの整数である160万行の結果セットは、現在のハードウェアの妥当な量ですばやくソートする必要があります。遅延が発生しているため、9億行の基本セットで処理が多すぎる可能性があります。課題は、その理由を特定することです。クエリプランの詳細を添付できますか?




    1. 自己署名証明書を使用して、PostgreSQLSSL接続を錆びた状態で使用する

    2. SQL-MySQLデータ(タイムスタンプとステータスメッセージを含む行のセット)からすべてのダウンタイムとダウンタイムの長さを検索します

    3. MySQLデータベースを空にする方法

    4. PostgreSQLのLEFTJOINとは