gpt4 book ai didi

mysql - 如何更有效地检查一个值是否出现在不同的表中?

转载 作者:行者123 更新时间:2023-11-29 06:41:44 26 4
gpt4 key购买 nike

我可以使用下面编写的查询获取必要的结果。遗憾的是,这需要我遍历一个带有子查询的巨大表,每次执行查询都需要 10 多秒。有没有更有效的方法来做到这一点?

SELECT * FROM CATEGORIES
WHERE ID IN (SELECT DISTINCT replace( CATEGORY, '-', '' )
FROM `LISTINGS`) LIMIT 0 , 30

注意:类别值在表 LISTINGS 中写为“-1-”,其中 1 是类别 ID。

最佳答案

你可以先试试这个:

SELECT *
FROM CATEGORIES c
WHERE exists (SELECT 1
FROM `LISTINGS` l
WHERE c.id = replace(l.CATEGORY, '-', '' )
)
LIMIT 0 , 30;

某些版本的 MySQL 以非常低效的方式实现 in,因此这可能会解决问题。

如果没有,则尝试添加索引 listings(category) 并执行:

SELECT *
FROM CATEGORIES c
WHERE exists (SELECT 1
FROM `LISTINGS` l
WHERE concat('-', c.id, '-') = l.CATEGORY
)
LIMIT 0 , 30;

这会“反转”比较,但允许 MySQL 使用索引进行查找。

关于mysql - 如何更有效地检查一个值是否出现在不同的表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21080621/

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