mysql 面试知识点笔记(一)数据库结构、索引相关

问:如何设计一个关系型数据库?

其实就是分析数据库的设计逻辑,拆分的各个模块,考验你对数据库的运作和各个功能是否有所了解。

b465fc1e69fbf2f1c50ee451eacdaad830a.jpg

问:为什么要使用索引?

   快速查询数据 避免全表扫描(表数据比较大适用)

问:什么样的信息能够成为索引?

主键、唯一键等,只要能够让数据存在却别性的字段都能成为索引。

问:索引的数据结构?

  二叉查找树、B-Tree、B+-Tree 、Hash

  • 二叉查找树 时间复杂度 O(logn) 二分查找的算法 速度快 ,但是在某些情况下会变成O(n) 不稳定,根节点越多性能越差

1ed61cc80858bfa46a8b2b2c52a8b63d920.jpg

  • B-Tree 定义 balance-tree

            根节点至少包含两个孩子       

            树中每个节点做多含有m个孩子(m>=2,既阶数)

            除根节点和叶节点外,其他每个节点至少有ceil(m/2)个孩子

            所有叶子节点都位于同一层

fe81fe0b8b471653f998376fad8ab256362.jpg

a7767b5a267f92808f0d4404010d9cfe281.jpg

b-tree的查询效率和二分查找树一样的,且层级矮的多,在大量数据的时候比较稳定,约等于O(logn)

 

  • B+-Tree balance+-tree(主流)

f704f33d87673e934fcf628a913d64dfae7.jpg  

8a18d1cfbbe58c0095f04a45a9c7bcd7887.jpg

如图       非叶子节点的子树有三个 跟指针的个数一样 表明能存更多的关键字

              非叶子节点不存放数据,只存储索引,数据都在叶子节点上。  b+树的检索就是从根节点开始 一直检索到子节点

              叶子节点链接起来 可以快速的做统计、排序

结论: B+树更适合用来做存储索引

B+树的磁盘读写代价更低。非叶子节点只存放指针索引,不包含数据,所以整体大小更小。如果放在同一硬盘上,占用的总板块越小,所以IO调用更少。

B+树的查询效率更加稳定 。所有查找都要走根到叶子节点的路,所以查询效率都是 O(logn)。

B+树更有利于对数据库的扫描。因为有叶子节点链接,所以做范围查询、统计的时候更高效。

 

  • Hash索引

8aea894ebcbd08133c16aa5eb0ad461cd50.jpg       

hash查询效率最高 一次查找既能除结果,但缺点明显,所以不能做主流索引

  • BitMap位图索引

高效的统计bool类型的索引,因为只做cpu的叠加操作,不过锁力度比较大,目只有Oracle和redis支持。

 

 

4.密集索引和稀疏索引的区别

397fdad0c6e89f2dadba4f2fb0899355ad9.jpg

  • 密集索引文件中的每个搜索码都对应一个索引值
  • 稀疏索引文件只为索引码的某些值建立索引项

密集索引决定了一个表的物理排列顺序(一个表只能有一个物理排列顺序),所以一个表只能有一个密集索引。

ca892446847b3907674b00fbe70028073d0.jpg

603a7d06eff14de44fc4be04015ece8283f.jpg

InnoDB 的文件结构是 .frm 和.ibd两个文件 .frm是存放数据结构信息 .ibd是存放索引和数据

MyISAM 是.frm .MYI .MYD 区别就是索引和数据分开的

 

 

源自: 慕课 

转载于:https://my.oschina.net/pentakill/blog/3044434

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值