首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rows_sent: 851 Rows_examined: 1649439,查询非常慢

Rows_sent: 851 Rows_examined: 1649439,查询非常慢
EN

Stack Overflow用户
提问于 2015-04-17 06:16:14
回答 1查看 1.2K关注 0票数 0

从mysql登录-慢速日志:

Query_time: 11.632750 Lock_time: 1.317329 Rows_sent: 851 Rows_examined: 1649439

代码语言:javascript
复制
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的同一个人中选择所有行。结果将是黄色和橙色的行,如示例图片中所示。这就是为什么我使用内连接。

EN

回答 1

Stack Overflow用户

发布于 2015-04-17 19:55:45

为什么是160万,而不是0.8M?看上去

  1. 阅读所有一张表格(0.8M),
  2. 对于这些行中的每一行,连接到另一个表(另一个0.8M)。

对于这个数字,两个表都是相同的表(“自联接”)是不相关的。

如何优化?如果您提供了SHOW CREATE TABLE record,答案会更容易,但这里有一个猜测。

增加两个索引:

代码语言:javascript
复制
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到表( deptschool )。

从SELECT生成索引

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29691706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档