索引创建使用

本文探讨了MySQL中如何通过截取字段创建索引来节省存储空间,并通过实例分析了不同查询语句对索引的利用率。实验表明,AND条件下的索引使用较为灵活,LIKE和范围查询也可利用索引,但某些情况下全表扫描仍可能发生。总结了MySQL在索引使用上的规律和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

索引

	最近看mysql高性能,可能是书比较老,感觉有些和想的不一样,所以自己试了试。
  • 截取字段建立索引

    - [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z6qu9MfK-1639538471759)(C:\Users\Monk\AppData\Roaming\Typora\typora-user-images\image-20211215104715845.png)]

    • ALTER TABLE ey_l add INDEX DE_O_UUID_UNIQUE (DE_O_UUID(6))

      这两种都可以,截取长度要自己把握尽量查出来不重复,这样建可以缩短储存空间。

  • 索引使用

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dR80jOBh-1639538471765)(C:\Users\Monk\AppData\Roaming\Typora\typora-user-images\image-20211215105652898.png)]

    建立了如上索引,

    1. select * FROM ey_l WHERE    DE_O_UUID like "3%" or ( DE_O_UUID like "3%" and C_DATE = "2021-12-03 13:48:32")
    
    2. select * FROM ey_l WHERE    DE_O_UUID like "3%" and  C_DATE = "2021-12-03 13:48:32"
    
    3. select * FROM ey_l WHERE    C_DATE = "2021-12-03 13:48:32" and DE_O_UUID like "3%" 
    
    4. select * FROM ey_l WHERE    DE_O_UUID like "3%" or  C_DATE = "2021-12-03 13:48:32"
    
    5. select * FROM ey_l WHERE    DE_O_UUID like "3%" and  C_DATE > "2021-11-03 13:48:32"
    
    6.select * FROM ey_l WHERE    DE_O_UUID is null and  C_DATE > "2021-11-03 13:48:32"
    7.select * FROM ey_l WHERE    DE_O_UUID >"f" and  C_DATE > "2021-11-03 13:48:32"
    

    以上那些用到了索引,通过explain发现只有 4 没有用到,应是查c_date要用全表,所以就直接全表,7也用了索引但是有意思的是我 DE_O_UUID >"f"的条件如果是 DE_O_UUID >"a"或者DE_O_UUID >"b"就是全表扫描,可能是mysql做了啥。

结论: 所以,and的时候有能用索引的基本能用到不会看你写的顺序,左匹配啥的。像like,范围查也能用到,函数我不太会,应该大部分也会用索引吧。毕竟你能想可以用,那mysql就做得出来(自我感觉)

连表的时候的on and和where

  • and和where起一样的作用的时候都可以,并且我觉得and更好
    1.and是过滤,过滤后连表表的行数会少很多,并且and和where本质上都是使用where删选(可以解释看一下)
    在这里插入图片描述
    参考:https://zhuanlan.zhihu.com/p/77847158
    多个join就把前一个结果继续join on。所以and先过滤了更好。

  • on and和where区别
    and 就是删选后 能够再执行join,执行join的时候把其他东西加进来
    where后面没有join所以加不进来
    还有就是上面说的我感觉是这样的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值