gpt4 book ai didi

sql - 不存在与不在

转载 作者:行者123 更新时间:2023-12-03 17:13:36 25 4
gpt4 key购买 nike

<分区>

我正在优化一些 SQL 查询(这可以被认为是我最近发布的问题的第 2 部分)并将一些 NOT IN 替换为 NOT EXISTS 谓词

我是否认为这样做的主要好处是,如果使用 NOT EXISTS,语句将在找到单个匹配项时终止,但 NOT IN 与计数子查询将不得不执行完整的操作表扫描?

如果选择的数据包含 NULL,NOT IN 似乎也需要额外的工作,这是正确的吗?

在我在过程中实现它们之前,我需要确保在这两种情况下第二个语句比第一个(并且功能等效)更好:

案例一:

        --exclude sessions that were tracked as part of a conversion during the last response_time minutes
-- AND session_id NOT IN (SELECT DISTINCT tracked_session_id
-- FROM data.conversions WITH (NOLOCK)
-- WHERE client_id = @client_id
-- AND utc_date_completed >= DATEADD(minute, (-2) * cy.response_time, @date)
-- AND utc_date_completed <= @date
-- AND utc_date_clicked <= @date)

AND NOT EXISTS (SELECT 1
FROM data.conversions WITH (NOLOCK)
WHERE client_id = @client_id
AND utc_date_completed >= DATEADD(minute, (-2) * cy.response_time, @date)
AND utc_date_completed <= @date
AND utc_date_clicked <= @date
AND data.conversions.tracked_session_id = d.session_id
)

案例二:

        -- NOT EXISTS vs full table scan with COUNT(dashboard_id)                                   
-- AND (SELECT COUNT(dashboard_id)
-- FROM data.dashboard_responses WITH(NOLOCK)
-- WHERE session_id = d.session_id
-- AND cycle_id = cy.id
-- AND client_id = @client_id) = 0

AND NOT EXISTS(SELECT 1
FROM data.dashboard_responses
WHERE session_id = d.session_id
AND cycle_id = cy.id
AND client_id = @client_id)

干杯

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