mysql left join执行慢_mysql left join 慢 的一个原因

今天用户反应一个CI的列表页打开巨慢。

查看代码,发现加载列表的SQL是多个表left join而成。

如下:SELECT nm.id, nm.model_id, nmm.code,

nm.serialcode, nm.manufacturer, nm.maintainer, nm.state, nm.type, nm.deleted,

nm.remark,

dp.deviceid, d.name AS d_name,

dp.portname,

i.name AS i_name, e.name AS e_name,

p.Code AS p_name

FROM netmodule nm

LEFT JOIN netmodule_model nmm ON

nmm.id = nm.model_id

LEFT JOIN netdeviceport dp ON

dp.linkmoduleid = nm.id

LEFT JOIN net_device d ON d.id =

dp.deviceid

LEFT JOIN (select * from

equipment_position where configitemid = 5) em ON em.EquipmentId = dp.deviceid

LEFT JOIN t_idc i ON i.id = em.IdcId

LEFT JOIN t_equipment e ON e.id =

em.ShelfId

LEFT JOIN idc_position p ON p.id =

em.PositionId

挨个去掉left join,一路排查,最后发现只要left join netdeviceport 这个表就会巨慢!而其它的几乎对查询速度没有影响。

我试了下左连接该表的ID字段(ID是自增的标识),发现速度很快,但只要是在ID之外的字段上作关联就会非常慢!

于是给这个字段加了索引,还是慢!

看了下netdeviceport这个表,里头有差不多8万条数据。难道是数据多的原因吗?

可以其它表的数据也有好几万的啊,怎么不见慢?

倒腾了一个晚上,最后发现,netdeviceport 这个表的引擎和其它表不一样,其它都是innodb,只有它是MyISAM!!

于是同化之:alter table netdeviceport

engine=innodb

一查,速度飞快!

原来是引擎不一样造成的!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值