mysql索引总结

索引失效

  • 索引列不能有null值
  • 匹配列前缀,like ‘%101’, 因为并没有针对101字段进行排序
  • 对于联合索引匹配时,不是使用的第一部分 则不会使用索引,必须要以第一个索引开始查询
  • or查询,只有连接每一列都加上索引时才会使用索引
  • 如果列为字符串,那么在条件查询时要将数据列用引号引起来
  • 如果全表扫描比索引查询快,则不会使用索引

联合索引左前缀原则

因为索引底层采用B+树叶子节点顺序排列,必须通过左前缀索引才能定位到具体的节点范围。

myisam 与 innadb区别

  1. 1.innadb不支持事务,行锁,b+tree存储数据方式,innadb叶子节点存储表的行数据
  2. myisam 支持事务,表锁,innadb,b+tree叶子节点存储行数据地址
  3. 数据组织方式不同,innadb插入时默认按照主键排序

mysql为什么用B+tree

平衡二叉树---->B-tree----->B+tree
树查询原则:树深度越高,磁盘查询io效率越低,b-tree一个节点可以存储两个数据

B+Ttree特点:

左子树比父节点小
每个节点可以存多个元素,并且排好序的
所有的非叶子节点都在叶子节点冗余一份
叶子节点具有指针指向下一节点

b+tree与b-tree区别

b+tree是基于b-tree,新增叶子节点与非叶子节点的联系,叶子节点是key-value形式,非叶子节点,只包含key不包含value,相邻的叶子节点采用链表形式进行连接,从而范围查询效率特别高

数据结构模拟工具

官网首页:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
Avl数据结构https://www.cs.usfca.edu/~galles/visualization/AVLtree.html

innodb结构

页是InnoDB管理存储空间的基本单位,一个页的大小默认是16KB
页存放数据是多条数据存放在一个叶中,这些数据会按照索引的大小进行排序
页码:相当于页目录,一个目录中有多条数据地址,以这些索引中数据最小值作为标记
https://uploader.shimo.im/f/VF9zLoQdOTwVo3FF.png
在这里插入图片描述
创建一个表的同时会开辟一个页,当我们向叶中一行一行插入数据当前页插入不进去时,此时需要开辟第二页继续插入,第一页与第二页使用双向链表连接. 后面插入页也是如此

插入第二页做法

  1. 现将第一页复制一份
  2. 开辟第二页
  3. 把新加放不下的数据加到第二页
  4. 把开始的第一页改成目录页
    在这里插入图片描述

这样做的好处:

目录页是固定的,这一页的地址在创建表时候就固定了,这样在查询数据时候有一个总的入口

不推荐使用uuid作为主键

  1. 排序规则不固定
  2. uuid长度过长,因为一个页的大小是固定的,这样会导致页中存储的数据较少,页的数量增多会导致树的深度变高,查询速度变慢

索引为什么会提高查询效率?

比如一串数字1872 ,先排序然后建立索引,就会提高查询效率

DDL DQL DML

DDL create drop alert
DQL query where
DML insert update delete

五个聚合函数

sum max min count avg

where 与 having区别

where后面不可以接聚合函数,先分组再过滤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值