mysql底层实现

搞清楚这几个问题:

mysql的底层数据结构是什么?是怎样存储元素的?和B-Tree的区别是什么?为什么会选择这种数据做存储?优势是什么?

什么是聚集索引?怎样避免回表查询?

连个存储引擎的区别是什么?

mysql的锁(需要写具体的实现步骤)?什么是乐观锁?什么是悲观锁?分别怎样实现?

答:底层数据结构是B+tree,怎样存储的看下图

和B-tree的区别嘛,再看一下B-tree的存储结构图片

为什么要选择这种数据结构?从以下几方面来说:为什么不用hash做索引?为什么不选平衡二叉树做索引?为什么不选b-Tree做索引?

答:hash索引不支持范围查找和排序功能。

为什么不选平衡二叉树(红黑树)做索引?   

 索引是存在于索引文件中,是存在于磁盘文件中。因为索引是非常大的,因此无法一次将全部索引加载到内存中。而这个磁盘的读取速度较内存中的读取
    速度是差了好几个级别的。而适合作为索引的结构应该是尽可能减少的执行磁盘IO操作,因为执行磁盘IO操作非常耗时。因此,平衡二茶树不适合作为索引。
B-Tree:平衡二叉树没能充分利用磁盘预读功能,而B树是为了充分利用磁盘预读功能而创建的一种数据结构。

聚集索引概念:数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引。

非聚集索引:除了聚集索引都是非聚集索引,存储顺序与逻辑顺序不同。

 

如何解决非聚集索引的二次查询问题:使用复合索引

InnoDB 聚集索引 的叶子节点存储行记录,因此, InnoDB必须要有,且只有一个聚集索引:

(1)如果表定义了PK,则PK就是聚集索引;

(2)如果表没有定义PK,则第一个not NULL unique列是聚集索引;

(3)否则,InnoDB会创建一个隐藏的row-id作为聚集索引;

为什么会回表查询?答:因为有两颗索引树,先普通索引查询,找到聚集索引的索引号,才会去聚集索引树中查找对应的记录。

MyISAM与InnoDB 的区别:

1.noDB支持事务,MyISAM不支持     2,。InnoDB支持外键,而MyISAM不支持

3. InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。

 

 MyISAM是非聚集索引,也是使用B+Tree作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

       也就是说:InnoDB的B+树主键索引的叶子节点就是数据文件,辅助索引的叶子节点是主键的值;而MyISAM的B+树主键索引和辅助索引的叶子节点都是数据文件的地址指针。

4. InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快(注意不能加有任何WHERE条件);

5. Innodb不支持全文索引,而MyISAM支持全文索引,在涉及全文索引领域的查询效率上MyISAM速度更快高;PS:5.7以后的InnoDB支持全文索引了

6.MyISAM表格可以被压缩后进行查询操作

7.InnoDB支持表、行(默认)级锁,而MyISAM支持表级锁

8.InnoDB表必须有主键(用户没有指定的话会自己找或生产一个主键),而Myisam可以没有

9.

Innodb存储文件有frm、ibd,而Myisam是frm、MYD、MYI

        Innodb:frm是表定义文件,ibd是数据文件

        Myisam:frm是表定义文件,myd是数据文件,myi是索引文

总结一下两个索引的区别:1.从事务支持上说   2.从聚集索引上说   3.从表文件上说   4.从底层数据存储来说    5.从是否需要主键上说   6.从支持的锁上来说   7.从外键支持上来说   8.从是否支持表的具体行数来说

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值