从mysql登录-慢速日志:
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设置了索引,但不确定如何为内部联接部分创建索引。我阅读了前面的一个问题(检查: 549024 -如何优化mySQL查询?),但仍然无法找到解决我极其缓慢的查询的方法。
编辑(为什么内部加入):
我想从拥有dept_id=12345的同一个人中选择所有行。结果将是黄色和橙色的行,如示例图片中所示。这就是为什么我使用内连接。

发布于 2015-04-17 19:55:45
为什么是160万,而不是0.8M?看上去
对于这个数字,两个表都是相同的表(“自联接”)是不相关的。
如何优化?如果您提供了SHOW CREATE TABLE record,答案会更容易,但这里有一个猜测。
增加两个索引:
INDEX(dept_id, year, type) -- the fields can be in any order
INDEX(number, year) -- the fields can be in either order第一种方法非常有效地帮助您进入r2。第二种方法使JOIN非常高效。
select record.name, dept.name, school.name FROM record有一个问题--没有JOINed到表( dept或school )。
从SELECT生成索引
https://stackoverflow.com/questions/29691706
复制相似问题