mysql 知识整理(待续)

文章目录

    • 1:MySQL 索引的数据结构有那些
    • 2:MySQL的存储引擎有哪些
    • 3:InnoDB 是否支持hash
    • 4:扰动函数
    • 5:hash表的索引结构
    • 6:二叉树,红黑树的索引结构
    • 10:最左匹配
    • 12:MRR
    • 13:FIC

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还是有问题


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部