gpt4 book ai didi

SQL NOT IN 可能存在性能问题

转载 作者:行者123 更新时间:2023-12-01 01:27:30 26 4
gpt4 key购买 nike

我正在尝试重构几段旧代码......我重构了下面的当前代码并突出显示了 NOT IN导致性能问题的语句。我正在尝试重写 NOT IN具有左外连接的部分。

如果可能,任何人都可以提供帮助或建议更好的方法吗?

SELECT 
left(unique_id,16) AS casino_id ,
right(unique_id,24) AS game_id
FROM (
SELECT
distinct o.casino_id + g.game_id AS unique_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'
) t
WHERE
unique_id NOT in
( SELECT casino_id + game_id AS casino_id
FROM
thirdpartysettlecalled
WHERE
[status] = 'Y')
ORDER BY casino_id

最佳答案

您有一个列连接,可以防止任何索引的使用

尝试 NOT EXISTS 将分别支持 2 列

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

之后,检查您的索引或类(class)...

这是 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

关于SQL NOT IN 可能存在性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6774259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com