gpt4 book ai didi

mysql - 重构大型联合语句以使用提前中断的 SELECT

转载 作者:行者123 更新时间:2023-11-30 21:55:39 26 4
gpt4 key购买 nike

解释这种情况有点困难,但目前我正在生成大量 联合来完成此任务。他们看起来有点像:

(
SELECT
ipaddress
FROM post
WHERE ipaddress = 'someipaddress'
AND userid NOT IN (1, {$postinfo['userid']}, {$vbulletin->options['sdwikipostuserid']})
LIMIT 1
)
UNION
(
SELECT
ipaddress
FROM post
WHERE ipaddress = 'someotheripaddress'
AND userid NOT IN (1, {$postinfo['userid']}, {$vbulletin->options['sdwikipostuserid']})
LIMIT 1
)

这些变得非常快,但似乎是我现在完成此任务的最快方式。我试过将其重构为类似的东西:

SELECT
ipaddress
FROM post
WHERE ipaddress in ('all ips', .....)
AND userid NOT IN (1, {$postinfo['userid']}, {$vbulletin->options['sdwikipostuserid']})
GROUP BY ipaddress

但这比大量的联合声明大约 x5。最大的问题是 post 表是 huuuuuge,因此重构的 SQL 被迫查看整个表,其中每个联合语句在找到单个实例后可能会中断。有没有什么方法可以指定在找到第一个唯一组时中断的 SQL?

有人知道如何将上面巨大的 union 语句重构为更简洁的东西吗?

最佳答案

你可以这样写查询:

select i.ipaddress
from (select 'someipaddress' as ipaddress union all
select 'someotheripaddress'
) i
where exists (select 1
from posts p
where p.ipaddress = i.ipaddress and
p.userid NOT IN (1, {$postinfo['userid']}, {$vbulletin->options['sdwikipostuserid']})
);

这是用 posts(ipaddress, userid) 上的索引优化的——一个索引,两列。

关于mysql - 重构大型联合语句以使用提前中断的 SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45287087/

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