gpt4 book ai didi

mysql - 优化 NOT IN 子查询

转载 作者:行者123 更新时间:2023-11-29 13:07:51 25 4
gpt4 key购买 nike

我正在使用 MySQL 数据库并尝试优化以下查询:

SELECT * FROM main 
WHERE (name IS NOT NULL AND name != '')
AND user_id NOT IN
( SELECT user_id FROM process
WHERE sns_id = 1 AND (process.status=1 OR process.status=2)
AND process.updated_at > 1392335789207) LIMIT 100;

本质上,我想确保在从main中选择行时,不包括process表中的所有user_id

我尝试使用 EXISTS 进行优化,但这似乎并没有产生任何更好的性能。

如何优化这个查询?

最佳答案

您可以使用查询:

SELECT *
FROM main
WHERE name IS NOT NULL
AND name != ''
AND user_id NOT EXISTS
(SELECT user_id
FROM process
WHERE sns_id = 1
AND process.status in (1,2)
AND process.updated_at > 1392335789207
AND process.user_id = main.user_id)
LIMIT 100

您说没有重复的用户 ID,因此您可以尝试使用此查询,这可能是最快的解决方案:

SELECT m.*
FROM main m
LEFT JOIN process p
ON p.user_id = m.user_id
AND p.sns_id = 1
AND p.status in (1,2)
AND p.updated_at > 1392335789207
WHERE m.name IS NOT NULL
AND m.name != ''
AND p.user_id is null
LIMIT 100

关于mysql - 优化 NOT IN 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22471071/

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