gpt4 book ai didi

带子查询的 Mysql 联合优化

转载 作者:行者123 更新时间:2023-11-29 01:39:30 24 4
gpt4 key购买 nike

我的问题是这个查询:

(SELECT    
ID1,ID2,ID3,ID4,ID5,ID10,ID11,ID13,ID14,ID454,ID453,
TIME,TEMP_ID,'ID_AUTO',PREDAJCA,VYTVORIL,MAIL,TEMP_ID_HASH,ID_SEND
FROM `load_send_calc`
WHERE `TEMP_ID` LIKE '$find%'
AND ACTIVE = 1 AND TEMP_ID > 0)
UNION ALL
(SELECT
ID1,ID2,ID3,ID4,ID5,ID10,ID11,ID13,ID14,ID454,ID453,TIME,'',
ID_AUTO,'','','','',''
FROM `temp`
WHERE `ID_AUTO` LIKE '$find%'
AND `ID_AUTO` NOT IN (SELECT TEMP_ID
FROM `load_send_calc`
WHERE `load_send_calc`.ACTIVE = 1)
)
ORDER BY TIME DESC LIMIT $limitFrom,$limitTo;

load_send_calc 和表temp 中有18000 条记录。查询本身需要 2 分钟以上的时间来执行。这个时候有什么办法可以优化吗?

我已经尝试对每个子查询进行排序,但没有太大帮助。我真的很绝望,所以我非常感谢任何帮助。

编辑:这是解释结果:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1 PRIMARY load_send_calc ALL NULL NULL NULL NULL 18394 Using where
2 UNION temp ALL NULL NULL NULL NULL 1918 Using where
3 DEPENDENT SUBQUERY load_send_calc ALL NULL NULL NULL NULL 18394 Using where
NULL UNION RESULT <union1,2> ALL NULL NULL NULL NULL NULL Using filesort

最佳答案

感谢您添加解释输出 - 它告诉我们很多。查询不使用单个索引,这对性能非常不利。一个非常简单的优化是在 join 以及 where 子句中使用的字段上添加索引。在您的情况下,这些字段将是:

load_send_calc.temp_id
load_send_calc.active
temp.id_auto

除此之外,您还有一个不必要的 AND TEMP_ID > 0,因为您已经使用 WHERE TEMP_ID LIKE '$find%' 限制了同一字段

关于带子查询的 Mysql 联合优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29671522/

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