【发布时间】:2018-10-26 06:05:10
【问题描述】:
在大学 SQL 课程关系数据库中,都是关于表之间的 JOINS 的。 所以我采用了一般的方法,首先做所有必要的 JOINS,然后选择数据,用 WHERE 过滤,必要时用 GROUP BY 过滤。这样代码和逻辑就很简单了。
但很多时候,当事情变得比单个 LEFT JOIN 更复杂时,我的性能会很差。
今天我只是重写了 JOIN 查询,执行时间为 600 秒 采用不同的方法: SELECT (SELECT ... WHERE ID = X.ID) FROM X 和 SELECT ... WHERE Y IN (SELECT ...) 现在它在 0.0027 秒内完成。
我很沮丧,我在我加入的字段上使用索引,但是性能太差了...
【问题讨论】:
-
真是个反问。连接很慢,如果可能,请避免它们。您不能在所有情况下都避免连接,某些任务需要连接。如果您需要一些查询优化方面的帮助,请提供更多详细信息。一切都很重要:查询、数据、索引、计划等。
-
是的,我知道我的问题不太具体……但我相信有经验的人可以就此事给我很好的建议。实际上,有经验的人所说的“加入很慢,如果可能,请避免它们”是非常有用的。
-
虽然没有
JOIN的重写仍然给出了最好的结果,但是通过使用EXPLAIN _query_我还发现我的索引是不完整的。我错误地忽略了对某个表的连接的索引,因为只有 40 条记录,我的错……之后,旧查询在 1 秒内完成。
标签: mysql performance join optimization