mysql 知识整理(待续)

1:MySQL 索引的数据结构有那些

  • B 树
  • B + 树
  • hash 索引

2:MySQL的存储引擎有哪些

show engines;
  • innoDB -B +
  • MyISAM - B+
  • MEMORY - hash

3:InnoDB 是否支持hash

  • 支持自适应的hash
    • 索引是系统自动帮我们创建的
    • 用户是没办法干预的
  • InnoDB
    • emp.frm 存储的数据的结构
    • emp.ibd 存储的实际数据文件 {真实数据文件+ 索引}
  • MyISAM
    • emp.frm 存储的数据结构
    • emp.MYD mydata,实际的数据
    • emp.MYI myindex,实际的索引

4:扰动函数

  • 16 个位置 ,实际上只需要了最后的四位
  • 所以我们要让高位向右移动,散列的更加均匀一些

5:hash表的索引结构

  • hash需要将所有的数据文件添加到内存中,比较消耗内存空间
  • 如果所有的查询都是等值查询,那么hash确定很快,但是实际工作中用的更多的是范围查询,而不是等值查询,因此,这种hash就不太合适了
  • MEMORY存储引擎使用
    • 占内存,我不怕
    • hash算法比较麻烦,我是用一个比较通用的算法
    • 保证尽可能的都是等值查询

6:二叉树,红黑树的索引结构

  • 树的深度过深,而造成 I/O 的次数变多,影响数据的读取效率
  • AVL 树和 红黑树基本是在基于内存情况才会使用的数据结构
  • InnoDB 默认一次取得是 16K 的数据
  • 减少 I/O 的次数
  • 减少 I/O 的大小
  • mysql 中有一个服务层,每次从存储引擎中把数据取出来,在服务层进行筛选之后,返回客户端

10:最左匹配

  • 回表
    • 使用二级索引,或者是辅助索引的时候
    • 先查 name字段的B +树,得到ID 之后
    • 再查 主键的 B+ 树

在这里插入图片描述
在这里插入图片描述

  • 索引覆盖
    • select * from table where name = ‘jiang’ 需要回表
    • select id from table where name = ‘jiang’ 不需要回表
  • 最左匹配
    • 在组合索引的时候使用,例如name 和 age 建立联合索引
    • 1 2 4 走索引

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 优化器

    • CBO
    • RBO

12:MRR

  • mult_rang read
  • 给了一千个ID ,我们可以先进行排序,这样我们就可以进行范围的查询
  • 加快速度,不必要一个一个的进行查询

13:FIC

  • fast index create
  • 插入和删除数据
    • 先创建临时的表格,把数据导入到临时表
    • 把原始表删除
    • 修改临时表的名字
  • 给当前添加一个Share锁,不会有创建临时文件的消耗,但是在操作源文件的时候,如果此时有人发起DML操作,就会造成数据的不一致现象。所以读写是没有问题的,但是在DML还是有问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值