Mysql in查询深度揭秘

In 查询实验结果

  • 问题:In到底能不能匹配上索引?

    • 先说结论,如果无需回表时,则全部都会有索引,无论数据量大小。如果查询需要回表,那么如果查询数量

  • 测试表结构:

在这里插入图片描述

  • 表索引:id、grade(表内数据均分为四个grade)

  • 数据量:123条

  • In 不回表时查询性能测试(返回结果只有id,没有其他数据,只在主键表里做操作)

    • 测试情况:In条件里是连续id,数据量小于总数据量20%时:
      • 结论:会走主键索引,但是此时查询类型为范围查询,且实际扫描到了100条数据。
      • explain select id from game_stage where id in (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)
      • 在这里插入图片描述
    • In条件里是连续id,数据量大于总数据量20%时:
      • 结论:
      • explain select id from game_stage where id in (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25)
        在这里插入图片描述
    • In条件里,id设置为有规律的分散,10、20、30这样的数据。且数量大于20%时
      • 结论:会不走索引,此时走的全表扫描。
      • explain select id from game_stage where id in (0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99)
        在这里插入图片描述
    • in条件里,id设置为有规律的分散,10、20、30这样的数据。且数量小于20%时
      • 结论:查询类型是range类型
      • explain select id from game_stage where id in (0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57)
        在这里插入图片描述
    • In条件里id是两个连续段,且小于20%
explain select id from game_stage  where id in (0,1,2,3,4,5,6,7,8,9,10,90,91,92,93,94,95,96,97,98,99)

在这里插入图片描述

  • In条件里id是两个连续段,且大于20%
    • 结论:
explain select id from game_stage  where id in (0,1,2,3,4,5,6,7,8,9,10,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值