mysql 技术点汇总

  1. MYSQL存储引擎介绍
MyISAM和InnoDB的区别

MYISAM是5.5之前默认的存储引擎,支持全文索引,压缩,空间函数,但是不支持事务和行级锁,最大却显示崩溃后无法安全恢复。

对比:

1.是否支持行级锁:MyISAM只有表级锁,InnoDB支持表级锁和行级锁,默认是行级锁

2.是否支持事务和崩溃后的安全恢复:MyISAM强调性能,每次查询具有原子性,执行速度更快,但是不提供事务支持,InnoDB支持外键和事务等高级数据库功能,支持回滚,崩溃后的修复,和事务

3.是否支持外键:MyISAM就不支持,InnoDB支持

4.是否支持MVCC:仅InnoDB支持,MVCC用于高并发事务,比加锁更加高效,MVCC只在READ COMMITTED 和 REEPEATABLE READ两个隔离级别下工作,内部使用乐观锁和悲观锁来实现

https://www.cnblogs.com/songwp/p/14338422.html

(在InnoDB使用聚簇索引或者访问数据放入内存的应用中,执行效率比MyISAM更快)
————————————————
版权声明:本文为CSDN博主「盖世英雄来了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40513633/article/details/111146180

  1. 索引
mysql索引使用的数据结构主要有BTree索引和哈希索引,哈希索引底层数据结构是哈希表,对于单条记录查询的时候可以选择哈希索引,查询性能最快,其余场景,更适合使用B-Tree索引

mysq中使用的是B+Tree索引,但是对于MyISAM和InnoDB实现的方式不同
![image.png](https://upload-images.jianshu.io/upload_images/7289196-b725f00daed95ee6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

为什么要使用B+树呢?

首先我们知道在数据库中索引可以使用hash算法,查询效率很高,但是不支持范围查询,因此我们考虑使用平衡二叉树,但是我们知道二叉树每个节点只有一个数据,如果数据变多的话,树就会越来越高,查询的成本也会增高,我们考虑使用B树,它可以在一个节点存储多个数据,B+树的优化是非叶子节点的数据会冗余一份在叶子节点,并且叶子节点之间使用指针相连,因此增高查询效率,而且支持范围查询,B+树里的元素也是有序的
————————————————
版权声明:本文为CSDN博主「盖世英雄来了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40513633/article/details/111146180


https://www.cnblogs.com/songwp/p/14338422.html
https://www.51cto.com/article/685312.html

  • InnoDB 索引实现——聚集
    表数据文件本身就是按 B+Tree 组织的一个索引结构文件
    聚集索引-叶子节点包含了完整的数据记录
    为什么 InnoDb 表必须有主键,并且推荐使用整型的自增主键?
    如果没有设置索引的话,MySQL 会选择一个数据唯一的列作为主键索引, 如果找不这样的列。会去做创建一个隐藏列类似 rowid。
    表数据文件按照 B+Tree 的数据结构维护,在叶子节点维护的是该行的数据。所以必须有主键。
    整型更方便 B+Tree 排序,自增的话,对于数据结构的存放更快, 顺序存放,不需要进行大量树的平衡操作。
    为什么非主键索引结构叶子节点的存储的是主键值?
    一致性, 让主键索引先成功,然后再去更新非主键索引关系
    节省存储空间。
    主键索引示意图:
image.png

非主键索引示意图:


image.png

两个数据文件:
.frm 主要是存储表结构信息
.ibd 主要是存储索引和数据

  • MyISAM 索引文件——非聚集

索引文件和数据文件是分离的(非聚集)

image.png

三个数据文件:
.frm 数据结构文件
.myd 文件主要是存储数据
.myi 文件主要是存储索引信息

  1. mysql 执行过程
 连接器:建立连接、验证账号密码、检查权限
 缓存(8.0失效)
分析器:词和语法的检查
优化器:选择最佳索引、生产执行计划
执行器: 通过API ,调用引起
![image.png](https://upload-images.jianshu.io/upload_images/7289196-91c81dcfcc27f0d4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

https://www.cnblogs.com/wyq178/p/11576065.html

https://blog.csdn.net/xhaimail/article/details/135287338
  1. mysql 语句解析过程
from 
join on
where
group by
having
select 
distinct
order by
limit
![image.png](https://upload-images.jianshu.io/upload_images/7289196-8a34c573ebe9c71a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

https://www.cnblogs.com/williamjie/p/11081592.html

  1. mysql explain详解

在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询时,会返回执行计划的信息,而不是执行这条SQL(如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中)
https://cloud.tencent.com/developer/article/1093229

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容