请教:为什么join时有索引,还是全表连接?

hzhj_1511 2016-01-06 07:09:32
加精
执行sql:select * from mon_res_metric m
inner join com_alert_active_list a ON a.metric_id = m.id

其中,a.metric_id有索引,m.id是主键有索引。
a表有4282条记录,m表有3504323条记录。
求指教,多谢!


...全文
8232 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
庄放 2016-01-14
  • 打赏
  • 举报
回复
走索引的全表连接
庄放 2016-01-14
  • 打赏
  • 举报
回复
最好先将数据缩小,然后Jion
生命沉思者 2016-01-14
  • 打赏
  • 举报
回复
不要以为全表扫描就慢,当你要读的是整个表时,全表扫描才是正确的选择,你没有过滤条件,如果a表走索引,反而要多读一次索引再去读数据,更慢,所以这样是正常的,而m表则走了索引。
benluobo 2016-01-09
  • 打赏
  • 举报
回复
网管系统? 这个查询效率很高了 因为你需要的是所有列,而且没有过滤条件 如果用索引,连接的时候是会快点,但是需要通过二级索引再去查询所在列 还不如直接全表扫描
Ginnnnnnnn 2016-01-09
  • 打赏
  • 举报
回复
因为你要查询全部的列,并且评估 a 表里面4300多条记录里面要返回3700多条,用全表扫描的性能会比走索引要高。而且数据库对全表搜索是会有相关优化的,所以这个执行计划没有问题啊。
  • 打赏
  • 举报
回复
select * from mon_res_metric m inner join com_alert_active_list a ON a.metric_id = m.id 因为你这个语句是没有查询过滤条件的,肯定还是要全表扫描的,从你的执行计划上来看,是以a表为主,来关联m表,a表用metric_id,通过 m表的主键索引列 id,来关联,所以m表用的是eq_ref 唯一性索引扫描, 这种执行计划相对来说,已经是比较好的执行计划了,以小的表来驱动大表,同时大表的关联字段上有 主键索引,这样的效率比较高。
  • 打赏
  • 举报
回复
如果你想要a表,也用上索引,那可以这么写select a.metric_id,m.* from mon_res_metric m inner join com_alert_active_list a ON a.metric_id = m.id
tcmakebest 2016-01-06
  • 打赏
  • 举报
回复
不全表哪知有没有呢, 总得有一个是全表啊

56,675

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧