有一张约20,000行的表格。一切正常,但其中一个查询已经减慢到大约5秒以上。所有表都有主键及其相关索引。还有外键及其相关索引。我已经尝试添加新索引并逐位修剪查询,但它没有产生巨大的差异。我也删除了订单,这确实有帮助,但只有这么多。我想知道我是否能得到一双新鲜的眼睛,看看我是否在这里遗漏了一些东西。
SELECT DISTINCT
t1.my_key,
t2.some_name,
t3.the_weather,
t4.another_value,
t5.hello_world,
t6.last_one
FROM
table_1 AS t1
INNER JOIN table_2 AS t2
ON t1.t2_id_fk = t2.t2_id_pk
INNER JOIN table_3 AS t3
ON t1.t3_id_fk = t3.t3_id_pk
INNER JOIN table_4 as t4
ON t1.t4_id_fk = t4.t4_id_pk
LEFT JOIN table_5 AS t5
ON t1.t5_id_fk = t5.t5_id_pk
LEFT JOIN table_6 AS t6
ON t1.t6_id_fk = t6.t6_id_pk
LEFT JOIN (
table_7 AS t7
INNER JOIN table_8 AS t8
ON (t7.t8_id_fk = t8.t8_id_pk)
)
ON (t1.t1_id_pk = t7.t1_id_fk)
我想知道是什么导致了using_temporary,特别是当我为它们都定义了索引时。出于某种原因,当我运行一个解释时,它看起来很好,除了表2中的第一个连接值之外,每个只需要搜索一行。在这种情况下,它返回一个using_temporary,每次需要搜索近3000行。 / p>
更新 我为table_1添加了一个唯一索引,该索引由相同顺序的其他连接表中的键组成。解释告诉我,这会减少从3000到294搜索的行数,但查询执行时间仍然过长。现在我必须说它不寻常。