Mysql调优(四)(1)索引的基础知识

中秋刚结束,不知道大家月饼吃了没,有没有和家人团聚。中秋选了一个地方带孩子玩去了。感觉比上班还累呢。

目录

innodb

索引的优势

索引的用处

索引的分类

索引采用的数据结构

索引匹配方式


innodb

底层是B+tree

hash表 散列运算

  • 利用hash存储的话需要将所有的数据文件添加到内存,比较耗费内存空间
  • 如果是等值查询的话,hash确实很快,但是在范围查找更多,hash就不合适了

进化过程 二叉树->二叉搜索树-> avl树 平衡树 -> 红黑树

  • 二叉树:越深说明io越多
  • 二叉搜索树:会排序
  • avl树 平衡树:为了保证平衡,最短子树和最长子树不超过1。所以数据越多,会进行n此旋转,因此插入效率极低,但是查询特别快。
  • 红黑树 是avl数的一个变种 是减少了查询效率 增加了插入效率,每次添加时变色加旋转,增加插入效率,任何一个单分支一样 不能连续出现两个红色。最长子树不超最短子树的两倍。

缺点:无论是二叉树,还是红黑树,都会因为树的深度而造成io次数变多,影响数据读取的效率。

所以就有了B树的由来,B+树就是B数的一个优化 因为B数的data占用了很大的内存,没有必要,所以就在子节点带上data数据就可以了。所以就有了B+数 三层的B+数 可以支持 千万级别的表

Q:为什么不使用B*树?

B*树就是在非叶子节点也有一个叶子节点的指向下一块的地址。

所以B+树就够了。

索引的优势

  1. 大大减少了服务器需要扫描的数据量
  2. 帮助服务器避免排序和临时表
  3. 将随机io变成顺序io

索引的用处

  1. 快速查询匹配WHERE子句的行
  2. 从consideration中消除行,如果可以再多个索引之间进行选择,mysql通常会使用找到最少行的索引(官网)
  3. 如果表具有多列索引,则优化器可以使用索引的任何最左前缀来查找行
  4. 当有表连接的时候,从其他表检索行数据
  5. 查找特定索引列的min或max值
  6. 如果排序或分组时再可用索引的最左前缀上完成的,则对表进行排序和分组
  7. 再某些情况下,可以优化查询以检索值而无需查询数据行

索引的分类

  1. 主键索引
  2. 唯一索引
  3. 普通索引
  4. 全文索引 text
  5. 组合索引

索引采用的数据结构

和存储引擎相关

  • 哈希表 Memory
  • B+树 MyISAM innodb

索引匹配方式

  • 全值匹配 是和索引中的所有列进行匹配
  • 匹配最左前缀 只匹配前面的几列
  • 匹配列前缀 可以匹配某一列的值的开头部分
  • 匹配范围值 可以查找某一个范围的数据
  • 精确匹配某一列并范围匹配另外一列 可以查询第一列的全部和第二列的部分
  • 只访问索引的查询 查询的时候只需要访问索引,不需要访问数据行,本质上就是覆盖索引

Q:数据库会帮我们自动建索引吗?

会的,会给主键创建唯一索引

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值