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

SQL NOT IN パフォーマンスの問題の可能性

    インデックスを使用できない列連結があります

    2 つの列を別々にサポートする NOT EXISTS を試してください

    SELECT distinct
         o.casino_id, g.game_id
    FROM 
        game g 
        INNER JOIN 
        Bet b ON g.game_id = b.game_id
        INNER JOIN
        CasinoUser u ON b.user_id = u.user_id
        INNER JOIN
        onewalletcasino o  ON u.casino_id = o.casino_id
    WHERE 
        game_start between dateadd(mi, -180, getdate()) 
                           and dateadd(mi, -5, getdate())  
        and
        b.[status] <> 'P'
        AND
        NOT EXISTS (SELECT *
               FROM 
                  thirdpartysettlecalled   tp
               WHERE 
                  tp.[status] = 'Y'
                  AND
                  tp.casino_id = o.casino_id AND tp.game_id = g.game_id)
    ORDER BY
        casino_id 
    

    その後、インデックスやコースを確認してください...

    これは、EXCEPT の適切な使用方法です。 あまりにも (ORDER BY は UNION のように最後に行きます:@Damien_The_Unbeliever に感謝します)

    SELECT distinct
         o.casino_id, g.game_id
    FROM 
        game g 
        INNER JOIN 
        Bet b ON g.game_id = b.game_id
        INNER JOIN
        CasinoUser u ON b.user_id = u.user_id
        INNER JOIN
        onewalletcasino o  ON u.casino_id = o.casino_id
    WHERE 
        game_start between dateadd(mi, -180, getdate()) 
                           and dateadd(mi, -5, getdate())  
        and
        b.[status] <> 'P'
    
    EXCEPT
    SELECT tp.casino_id, tp.game_id
    FROM thirdpartysettlecalled   tp
    WHERE tp.[status] = 'Y'
    
    ORDER BY
        casino_id
    



    1. Schema_migrationsを作成するRails-Mysql2::Error:指定されたキーが長すぎました

    2. ボトル、SQLAlchemy、TwitterAPIを使用したシンプルなWebアプリの構築

    3. グループ関数の無効な使用を与える単純なSQLクエリ

    4. Oracleテーブルで改行文字を検索する方法は?