MySQL索引的常用知识点

索引结构:b+树索引其实是一种数据结构
注意b+树是mysql,索引默认的结构;一张表至少有一个索引(主键索引),是可以有多个索引的
mysql中的b+tree非叶子节点也叫内部节点,只存储 健值(主键的值) + 指针(存储子节点的地址信息) 主键索引:健值(主键的值) + 指针(存储子节点的地址信息)非主键索引:非主键列的值 + 指向下一个节点的指针(存储子节点的地址信息)所有的数据都存在叶子节点中; 同时叶子节点上还存有一个指向相邻叶子节点的指针如果是聚簇索引(主键索引),叶子节点存储的是实际数据如果是非聚簇索引,则保存的是聚簇索引的索引key,也就是主键索引的值;查询非聚簇索引会有一个回表操作b+tree的每个叶子节点增加了一个指向相邻叶子节点的指针,它的最后一个数据会指向下一个叶子节点的第一个数据,形成了一个有序链表的结构。为什么b+ 树比b 树更适合作为索引?b+ 树的磁盘读写代价更低 b+ 树的数据都集中在叶子节点,分支节点 只负责指针(索引);b 树的分支节点既有指针也有数据 。这将导致b+ 树的层高会小于b 树的层高,也就是说b+ 树平均的io次数会小于b 树。b+ 树的查询效率更加稳定 b+ 树的数据都存放在叶子节点,故任何关键字的查找必须走一条从根节点到叶子节点的路径。所有关键字的查询路径相同,每个数据查询效率相当。b+树更便于遍历 由于b+树的数据都存储在叶子结点中,分支结点均为索引,遍历只需要扫描一遍叶子节点即可;b树因为其分支结点同样存储着数据,要找到具体的数据,需要进行一次中序遍历按序来搜索。b+树更擅长范围查询 b+树叶子节点存放数据,数据是按顺序放置的双向链表。b树范围查询只能中序遍历。b+ 树占用内存空间小 b+ 树索引节点没有数据,比较小。在内存有限的情况下,相比于b树索引可以加载更多b+ 树索引。myisam与innodb 的区别innodb支持事务,myisam不支持
innodb支持外键,而myisam不支持
innodb是聚集索引,数据和索引存到同一个文件里;myisam是非聚集索引,数据和索引不在同一个文件里;都是使用b+tree作为索引结构
innodb不保存表的具体行数,执行select count(*) from table时需要全表扫描。而myisam用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快(注意不能加有任何where条件)
因为innodb的事务特性,在同一时刻表中的行数对于不同的事务而言是不一样的,因此count统计会计算对于当前事务而言可以统计到的行数,而不是将总行数储存起来方便快速查询。innodb会尝试遍历一个尽可能小的索引除非优化器提示使用别的索引。如果二级索引不存在,innodb还会尝试去遍历其他聚簇索引。
如果索引并没有完全处于innodb维护的缓冲区(buffer pool)中,count操作会比较费时。可以建立一个记录总行数的表并让你的程序在insert/delete时更新对应的数据。和上面提到的问题一样,如果此时存在多个事务的话这种方案也不太好用。如果得到大致的行数值已经足够满足需求可以尝试show table status
那么为什么innodb没有了这个变量呢?innodb支持表、行(默认)级锁,而myisam仅支持表级锁
innodb表必须有唯一索引(如主键)(用户没有指定的话会自己找/生产一个隐藏列row_id来充当默认主键),而myisam可以没有主键
innodb存储文件有frm、ibd,而myisam是frm、myd、myi
innodb:frm是表定义文件,ibd是数据文件myisam:frm是表定义文件,myd是数据文件,myi是索引文件索引失效的场景对索引列使用了函数、表达式或运算符:当查询条件中使用了函数、表达式或运算符时,mysql就无法使用该列的索引,因为它需要对每行数据进行计算,而不是直接查找索引。查询条件中使用了不等于操作符(、!=)、not null, not in 等模糊查询:当查询条件中使用了like、%或_等模糊匹配符号时,mysql无法使用索引进行快速定位。or条件:当查询条件中包含多个or条件时,mysql无法使用索引进行快速定位。范围查询:当查询条件中使用了between、、=等操作符时,mysql只能使用索引中的一部分数据,需要读取更多的数据进行过滤,降低了查询效率。数据类型不匹配,需要隐式转换类型对索引列进行排序,因为它需要将数据按照指定的顺序进行排序复合索引,如果不使用前列,后续列也将无法使用小结正确的使用索引,能够显著提高数据库的查询效率。本文汇总了mysql索引的常用知识点,帮助大家快速记忆

深度解读对残差网络动机的理解
ATM LANE的概念,ATM局域网的优点
电器超龄服役的隐患到底有多大
水位监测系统施工方案
“刷脸”给生活提速
MySQL索引的常用知识点
出售Agilent83483A电模块
2012年面板产业三大发展趋势预测
纸棒机的生产安全方式具体是什么样的
在低成本FPGA中实现动态相位调整
中国移动发布的5G OpenUPF白皮书助力5G赋能垂直行业迈出了重要一步
苏州维信获东山精密4000万美元资助,电路板业务迈向新阶
利用MCU和FPGA设计车载信息娱乐系统的系统架构与应用
鸿海集团MIH电动汽车平台即将交付
佛山照明与哈尔滨文旅集团合作将共同打造冰雪专用灯光系统及设计
日立宣布收购了西班牙VLC Photonics公司
空调温度传感器的作用是什么
主打大容量电池和防水防尘功能的LG K、X系列新机将发布
基于TI的OMAP平台手持设备语音应用解决方案
日系匠心闪耀全球市场,东芝电视重塑行业新格局