gpt4 book ai didi

mysql - MySQL 查询执行速度非常慢

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

我的任务是为一个速度慢得令人痛苦的客户提供应用程序支持。我启用了 MySQL Slow_query_log 并发现了一些似乎是罪魁祸首的查询。我对这个查询正在做什么有点困惑,但是任何关于如何重写它的建议都会有帮助。

SELECT
table_a.id AS table_a_id_1,
table_a2.id AS table_a_id_2
FROM
table_a,
table_b
LEFT JOIN
table_a AS table_a2
ON
table_a.value = table_a2.value
WHERE
table_a.value_id = 112 AND
table_a2.value_id = 113 AND
table_a.status != table_a2.status AND
table_a.id = table_b.id;

对我来说,查询似乎是从一个表中选择相同的数据两次,然后与所选数据进行一些比较,并与 table_b 执行联接。这是来自 MySQL 的日志,引用了该查询的执行。

Query_time: 160.854398
Lock_time: 0.000139
Rows_sent: 12
Rows_examined: 10339025

您提供的任何建议都会很有帮助!

最佳答案

查询计划可能正在创建交叉联接,如 WHERE 子句中指定的那样:

SELECT table_a.id AS table_a_id_1,
table_a2.id AS table_a_id_2
FROM table_a join
table_b
on table_a.id = table_b.id LEFT JOIN
table_a AS table_a2
ON table_a.value = table_a2.value
WHERE table_a.value_id = 112 AND
table_a2.value_id = 113 AND
table_a.status != table_a2.status

这也表明 table_a.id、table_a.value 和 table_b.id 上的索引可能会有很大帮助。

现在,您也许可以大大简化这个查询。例如,它似乎在 table_a 中获取了成对的 112、113,其中状态不同。我真的不知道 table_b 在哪里使用,除非有某些过滤标准。您可以通过执行以下操作更有效地获取此列表:

SELECT table_a.id AS table_a_id_1,
table_a2.id AS table_a_id_2
FROM (select ta.* from table_a ta where ta.value_id = 112) ta join
(select ta.* from table_a ta where ta.value_id = 113) ta2
ON ta.value = ta2.value and
ta.status != ta2.status

关于mysql - MySQL 查询执行速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11197729/

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