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

SQL Server:長いCASEステートメントの代替

    CASEによるパフォーマンスの問題はないと思います ステートメント自体。 1つのクエリでデータを1回渡すため、商品IDごとに複数のクエリを実行するよりもパフォーマンスが大幅に向上する可能性があります。

    WHEREを使用すると、クエリのパフォーマンスが向上する可能性があります 条項-それがあなたの長いクエリでさえ可能であるならば。

    テーブルが大きく、製品IDでインデックスが付けられており、クエリが製品の小さなサブセットを更新している場合、クエリを個別のUPDATEに分割するとパフォーマンスが向上する可能性があります。 product_idごとのクエリ。そうしないと、巨大なテーブルでテーブルスキャンが発生する可能性があります。例:

    UPDATE table SET totalAmt = a*b*c*d WHERE product_id = 1
    UPDATE table SET totalAmt = c*d*e + 1 WHERE product_id = 2
    

    すべてのケースがproduct_idに依存している場合 、次のように構文を省略できます:

    CASE product_id
        WHEN 1 THEN a*b*c*d
        WHEN 2 THEN ...
    END
    

    コードを読みやすくするためにコメントを使用することをお勧めします。たとえば、製品がハードコードされた既知のIDのセットである場合、それらが何であるかを指定できます。同様に、将来のコード保守が計算を説明するのに役立つ可能性があります:

    UPDATE table
    SET totalAmt =
        CASE WHEN product_id = 1 -- table
        THEN a*b*c*d             -- some explanation of calculation
        CASE WHEN product_id = 2 -- chair
        THEN ...
    


    1. 有効なSQL列名を確認してください

    2. mysqlサービスのパスを変更する方法

    3. MySQLとSymfony2

    4. MySQLからFirebaseへのデータの移行