我一直在负责支持的客户端慢得令人痛苦的应用程序。我启用了MySQL slow_query_log并发现了一些似乎是罪魁祸首的查询。我对这个查询做了些什么感到有点困惑,但任何关于如何重写这个的建议都会有所帮助。很慢执行MySQL查询
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;
对我来说,它看起来像查询从单个表中选择相同的数据两次,然后做与选定的一些数据比较,以及执行与表-B联接为好。这里是MySQL引用这个查询执行的日志。
Query_time: 160.854398
Lock_time: 0.000139
Rows_sent: 12
Rows_examined: 10339025
任何建议你可以提供将是有益的!
我甚至不认为这个查询是有效的......你确定它运行正确吗?在发布之前是否对查询进行了任何更改? –
我也不认为它是有效的,它对我来说看起来很奇怪。但是,它运行时不会产生错误并返回行。我对查询做的唯一更改是用table_a和table_b ...替换表名。 我会检查,看看是否我可以张贴实际的完整的查询,如果你认为这将有助于。这真的更令人困惑......哈哈! –
这是一个不好的极端思想结合显式和隐式连接(使用隐式连接在所有的是SQL反模式)。只需修复以使用明确的连接即可获得帮助,那么您需要修复查询中出现错误的部分。在@ GordonLinoff的回答中看到我的评论。 – HLGEM