【发布时间】:2015-04-17 06:16:14
【问题描述】:
来自 mysql-slow-log 的日志:
Query_time:11.632750 Lock_time:1.317329 Rows_sent:851 Rows_examined:1649439
select record.name, dept.name, school.name FROM record
inner join record as r2 ON
record.number=r2.number AND record.year=r2.year
AND r2.dept_id=12345 AND r2.type=1 AND r2.year=2015
LEFT JOIN school ON record.school_id=school.id
LEFT JOIN dept ON record.dept_id=dept.id
record 表中大约有 80 万行,但查询为什么会检查超过 100 万行?
我已经为表dept 和表school 设置了索引,但是我不确定如何为内部连接部分创建索引。我阅读了上一个问题 (Rows_sent: 12 Rows_examined: 549024 - how to optimize mySQL query?),但仍然无法解决我的查询速度极慢的问题。
已编辑(为什么是内部联接):
我想从具有 dept_id=12345 的同一个人中选择所有行。结果将是示例图片中的黄色和橙色行。这就是我使用内连接的原因。
【问题讨论】:
-
你为什么要自己加入唱片?在这种情况下,这似乎没有任何用处吗?
-
运行以下命令并将结果分享到问题中。
explain select ... -
确保
record.school_id和record.dept_id上有索引,并去掉记录表上的自连接。看起来毫无意义。 -
我添加一些词来解释为什么需要内连接。
-
WHERE dept_id=12345有什么问题,然后进一步处理结果以获得这些人所属的其他部门?
标签: mysql mysql-slow-query-log