面试--MYSQL的优化,以及InnoDB存储引擎的好处

背景:项目使用的是MariaDB(即MYSQL卖给Oracle后,怕以后会闭源,开发者在5.5分支新扯的分支)。

MySQL5.5以后默认选用的是InnoDB存储引擎,5.5以前是myisam。

下面这些问题,都是个人觉得典型的,自己整理记录。

第一个问题是:InnoDB和myisam的区别?

答:1,存储结构的不同,前者在磁盘上是两个文件,即frm(表定义文件)和ibd(数据文件);后者是三个文件,即frm(表定义文件),myd(数据文件),myi(索引文件)。

      2, InnoDB支持事务,MyISAM不支持事务,新增更新多的使用InnoDB,查询多的使用MyISAM。

     3,InnoDB是聚集索引,使用B+Tree的索引结构,叶子节点存数据,数据和索引在一个文件-数据文件中;MyISAM是非聚集索引,也使用B+Tree,但是叶子节点存的是指针,数据和索引不在同一个文件中。

   4,InnoDB支持行级锁,MyISAM支持的是表级锁。

   5,InnoDB必须有主键,推荐使用自增id,即使没有索引,MySQL会自己维护一个主键。

第二个问题是:InnoDB为什么推荐使用自增ID作为主键?

答:自增ID可以保证每次插入时B+索引是从右边扩展的,可以避免B+树和频繁合并和分裂(对比使用UUID)。如果使用字符串主键和随机主键,会使得数据随机插入,效率比较差。

第三个问题是:为什么选择B+树索引结构?

答:官方给出的,一个索引可以支持存储16kb,上千万条数据3次磁盘io就能读到内存中。磁盘io操作消费的时间比内存操作,要大的多的多,所以减少磁盘io就是减少耗时。可以看看这个博文

https://www.cnblogs.com/sunshineliulu/p/11516851.html

索引结构有二叉树,红黑树,有序链表,hash,B Tree,B+树。

 

sql优化:https://mp.weixin.qq.com/s/yAvZNH2S-TINnxOt_rsJdA

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少儿学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值