Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL NOT IN có thể có vấn đề về hiệu suất

Bạn có một nối cột ngăn cản việc sử dụng các chỉ mục

Thử KHÔNG TỒN TẠI sẽ hỗ trợ 2 cột riêng biệt

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 

Sau đó, hãy kiểm tra các chỉ mục hoặc khóa học của bạn ...

Đây là cách sử dụng tốt của NGOẠI TRỪ quá (ORDER BY ở cuối giống như UNION:cảm ơn @Damien_The_Un Believer)

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ghi tệp csv vào cơ sở dữ liệu SQL Server bằng python

  2. Không thể chuyển đổi giá trị tham số từ chuỗi thành Int32

  3. ABS () Ví dụ trong SQL Server

  4. nối cột dữ liệu được phân tách bằng dấu phẩy

  5. Sử dụng SET TEXTSIZE để giới hạn dữ liệu được trả về cho mỗi hàng trong SQL Server