mysql详解

一、存储引擎

mysql的引擎主要有以下几种:innodb,MyIsam,Memory,它们的侧重点各不相同

1、innodb

innodb是一个事务级别的存储引擎,因为支持事务,所以需要锁定要操作的元素,那么这个元素就不能过大,目标是全表?那肯定不行,所以innodb支持行级别的锁,这样就能保证高并发的时候的的效率更高

2、MyIsam

MyIsam是mysql的默认存储引擎,但是它不支持事务,因此在执行写操作(即插入或更新)时会锁住全表

3、Memory

二、索引

索引能够加快搜索,因为通常会只遍历符合索引的内容,所以大大减少了遍历的内容,但是索引作为一种数据结构,在不通的引擎中的应用也是不同的。
首先需要知道一点,文件系统的目录索引等都不会使用红黑树,AVL树等看似也很高效的结构,因为文件系统时放在磁盘中的而不是内存,磁盘相比内存最大的缺点就是IO的速度,磁盘需要寻道和旋转,物理上的速度很慢。另外红黑树等逻辑上的父子节点在物理上可能隔得很远,更加剧了效率的降低。
那么mysql索引使用的是什么结构呢,他们使用的都是B+树,其实B-树的效率也差不多,但是B-树因为将数据放在了中间节点中,所以索引包含的文件更大,查找的时间会稍微长一些,想要知道B+-树的区别可以看我的另一篇文章数据结构-树

虽然MyIsam和innodb都是使用B+树,但是在使用上还是有所不同的。
MyIsam在叶子节点的data中存放的是数据的地址,因此也叫“非聚集”的索引,那么innodb就是“聚集”索引,它的叶子节点的data中存放的就是数据。
innodb的数据放在节点中,因此innodb的索引是按照主键聚集的,那么innodb就要求必须要有主键,而MyIsam可以不用主键。
在索引的分类中,我们可以按照索引的键是否为主键来分为“主索引”和“辅助索引”,使用主键键值建立的索引称为“主索引”,其它的称为“辅助索引”。因此主索引只能有一个,辅助索引可以有很多个。
MyIsam只用辅助索引时,只需要一次遍历就可以得到地址,而innodb如果使用辅助索引的话,其实是先遍历辅助索引,因为它的辅助索引的data是主键,所以需要再次遍历主索引得到数据,所以主键尽量不要太长并且是单调的。单调的好处是在B+树的底层插入操作的时候可以直接加在最后,而不用放进中间导致需要分裂等等问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一年又一年,字节跳动 Lark(飞书) 研发团队又双叒叕开始招新生啦!【内推码】:GTPUVBA【内推链接】:ht...
    卢卡斯哔哔哔阅读 1,276评论 0 0
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,763评论 0 30
  • MySQL数 据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在...
    时待吾阅读 1,618评论 0 4
  • MySQL不权威总结 欢迎阅读 本文并非事无巨细的mysql学习资料,而是选择其中重要、困难、易错的部分进行系统地...
    liufxlucky365阅读 2,662评论 0 26
  • 一、MySQL优化 MySQL优化从哪些方面入手: (1)存储层(数据) 构建良好的数据结构。可以大大的提升我们S...
    宠辱不惊丶岁月静好阅读 2,516评论 1 8