当前位置:网站首页>急了,Mysql索引中最不容易记的三个知识点通透了
急了,Mysql索引中最不容易记的三个知识点通透了
2022-08-08 16:22:00 【华为云】
作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云星级博主
擅长领域:全栈工程师、爬虫、ACM算法
公众号:知识浅谈
联系方式vx:zsqtcc
索引失效索引下推changebuffer 总结
正菜来了
- 索引:Mysql中用于为了提高数据的查询效率构建的一个数据结构表,有唯一索引,普通索引,全文索引等。
- 索引字段:常选用区分度高的字段,where后查询条件频繁的字段,外键字段等,并不是所有的字段都创建索引就是最好的。
常见的索引失效的条件:
- 索引字段作为了函数参数;
- 索引字段在表达式中;
- 索引字段进行了隐式转换,就是 本来是数字类型,=后边用的是’123’ 有单引号,就会发生自动隐式转换,就无法使用索引;
- like模糊查询时候对应的%匹配符在前边;
- 范围查询后的字段无法使用索引;
温馨提醒:这个有点不太好理解
索引下推是在5.7时候引入的,5.7之前是没有索引下推这个功能的。
索引下推:是放生在联合索引且发生了回表查询的情况下,才有可能出发索引下推这个功能的。
- 举个:
table1字段中含有:a,b,c,d,e; 建立的联合索引为(a,b,c);
查询语句 select * from table1 where a like ‘小%’ and b=12 - 解析:
因为使用到了联合索引,但是因为like使后边部分索引失效了,并且要查询所有字段信息,需要回表查询,但是如果是5.6之前的话,就需要一个个回表查询在匹配字段查找符合条件的即可,但是5.7及其之后的就可以先对聚合索引中b是否等于12这个条件判断,符合这个条件再回表,这个过程就叫做索引下推,区别就在去是否先判断聚合索引中是否有其他字段不满足条件,在进行回表。
和bufferpool有点类似的一块空间,这个changebuffer的作用就是如果更新相应字段数据的时候在内存中存在这个相应字段的数据,可以直接更新,如果没有存在,就可以考虑吧更新的内容写入到changebuffer中去,等到下一次查询或者数据库关闭或者规定时间之后就会更新到数据库,之所以有changebuffer,是因为在频繁更新的时候可以减少写入到磁盘的次数。
使用条件:一般使用在普通索引中,像是唯一索引就不可使用,因为当插入数据的时候因为唯一索引有唯一性的约束,插入的时候需要去遍历数据表中的数据是否是满足唯一性,只有满足了才可以插入,索引需要读取数据到内存中,这时候就用不上changgebuffer了。一般是用在更新频繁,查找不频繁的索引字段上,因为查找的时候会merge也就是更新到数据磁盘上。
补充:changebuffer也是可以持久化的数据,changebuffer不仅在内存中有拷贝,也会被写入到磁盘上。
这三个东西,这回算是整明白了。
边栏推荐
猜你喜欢
随机推荐
Mysql数据库入门学习笔记
codeforces 444C DZY Loves Colors
spark集群环境搭建
线程本地存储 ThreadLocal
基于ECS实现一分钟自动化部署【华为云至简致远】
C语言学习概览(六)
Jingdong T9 pure hand type 688 pages of god notes, SSM framework integrates Redis to build efficient Internet applications
The situation of the solution of the equation system and the correlation transformation of the vector group
鹏城杯部分WP
我分析30w条数据后发现,西安新房公摊最低的竟是这里?
ImportError: numpy.core.multiarray failed to import [cv2, matplotlib, PyTorch, pyinstaller ]
调研阶段复盘
leetcode 31. 下一个排列(实现next_permutation 函数)
C语言学习概览(五)
程序发生run time error原因及解决方案
Kubernetes-Basics-Common Commands
ESP8266-Arduino编程实例-ADXL345三轴加速计驱动
是时候展现真正实力了!揭秘2022华为开发者大赛背后的技术能力
hdu2475 Box
【云原生】-MySQL压测神器HammerDB的部署及使用