MySQL高级篇之多表索引优化实战

多表优化

上一篇写了单表优化,那么这篇就来说一下多表优化
1建立三张表
菜单表Category,二级菜单表CategorySecond和商品表product

首先分析两张表的查询

例子:查询一级菜单下的所有二级菜单
select * from category cate
left join categorysecond cse on cate.cid=cse.cid
执行sql成功,分析这条SQL
在这里插入图片描述
为这个字段建立索引:
1,在category中建立索引
create index ind_cid on category(cid)在这里插入图片描述
可以发现:
虽然我们建立了索引,但是这个sql并么有用到我们所建立的索引,是因为什么呢?
我接着往下看
2,在categorySecond中建立索引

create index ind_cid on categorysecond(cid)
在这里插入图片描述
可以看到,在右表categorysecond中建立索引之后,就用到了索引
性能也得到了提高:
type由all变成了ref,rows由36变成了4
思考一下,得出结论:
在进行多表关联查询的时候,左表相当于数据源,而右表相当于目标表,左表任何时候,都一定会全部加载,而右表只会加载符合条件的记录行,所以即使我们将索引建立到了左表,也不会生效!!!
接下来再继续看看三表的情况吧!

例子查询菜单中的所有商品
select * from category cate
left join categorysecond cas on cate.cid=cas.cid
left join product pro on pro.csid=cas.csid
分析这条SQL在这里插入图片描述
上图所示:未建立索引,其type为all,rows中显示了对应表的所有行,即全表扫描

根据两张表的优化结论,直接给右表categorysecond中的cid和product中的csid建立索引
create index ind_cid on categorysecond(cid);
create index ind_csid on product(csid)
再次分析这条sql
在这里插入图片描述
可以看到该sql使用了我们建立的两个索引
type类型由all变成了ref类型,rows预查询行也大大减少
总结:
在进行多表关联查询时,在被关联表上建立索引,可以使用到索引字段。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值