数据库专辑

本文详细介绍了MySQL的索引模块,包括MyISAM和InnoDB存储引擎的索引结构,以及B+树的优势。讲解了MySQL执行SQL查询的流程,并探讨了如何优化索引和慢查询。在锁模块,对比了MyISAM和InnoDB的锁机制,讨论了不同锁类型及其应用场景。还概述了数据库事务的四大特性。最后,提到了一些SQL语法如GROUP BY和JOIN的使用方法。
摘要由CSDN通过智能技术生成

数据库专辑


一、索引模块

1、MySQL索引数据结构(两种)
一般数据库使用的是B-树或者B+树做索引。索引本身也是特别大,不可能都存在内存中,所以部分存在磁盘中,就会导致查找的时候需要读取IO,导致速度受影响。
(1)MyISAM(非聚集索引,索引跟值放在两个文件,先找索引,后找值)引擎使用B+Tree作为索引结构,索引文件只保存地址。MyISAM数据域存储的是索引值。(也就是在叶子节点中,存储的只是每个data的地址,然后会单独有一张表存储这些data的值,data就是搜索的每一行记录)
(2)InnoDB(聚集索引,索引跟值放在同一个文件)也使用B+Tree作为索引结构,但具体实现方式却与MyISAM截然不同。这棵树的叶节点data域保存了完整的数据记录。
(3)mysql5.1以后默认使用的存储引擎是innoDB,主要考虑innoDB支持事务,是行级锁,所以相对更加安全而且效率高。

补充:从支持索引也了解到,InnoDB有且只有一个聚集索引,数据文件和索引绑定在一起,必须有主键(最好设置int型或者自增主键,如果没有主键,将会自动选择一个适合的作为主键或者生成虚拟列作为主键),通过主键索引效率高,但是辅助索引要查两次,先查主键再查数据。但ISAM是非聚集索引,数据和索引文件分离,索引保存的是数据文件的指针,主键索引和辅助索引是独立的,因此ISAM在增删改很少的系统中,性能要比innoDB好。

【补充】MYSQL需要索引的原因:好比查找书中的一页,当客户端要查找数据库的内容的时候,索引相当于目录,能够帮助我们快速定位到要查找的内容。

需要注意:如果要使用事务,要更改为innodb,否则实际不会使用事务且不报错。
对于innodb,也有特例,比如UPDATE student SET age=10 WHERE name LIKE ‘王%’,这种情况不能确定要UPDATE的行位置,InnoDB同样会锁住整个表。
在这里插入图片描述
【MySQL用B+树的原因】:最好的利于查找和插入的两种树是B和B+、但是采用B+树的原因是:在B树中,非叶子节点也会存一些key对应的data(数据),而且存的数据远大于key的大小,因此导致非叶子结点不能存很多key,这样当数据量很多的时候,就会导致树的高度很快变大,最后效率又降低。但是B+树不同,非叶子节点不存数据,因此非叶子节点可以放很多key,所有的data数据都放在叶子节点,这样子即使当数据很多(也就是key也会很多),同样不会导致树的高度太大,这样子查找效率就搞了。
https://blog.csdn.net/csdnlijingran/article/details/102309593 。

2、MySQL执行SQL的流程(以查询为例)
(1)客户端发送一条查询请求。
(2)先在缓存中找,找到了立即返回。(MySQL执行查询语句前,会通过缓存查看,是否执行过该语句(以k-v形式缓存在内存),key为查询语句,value为结果集。)
(3)如果没找到,则分别通过解析器进行解析、预处理器进行预处理(也可以说是分析器进行词法语法等的分析)、然后由优化器对解析树生成对应的查询计划。
(4)MYSQL根据查询计划,调用存储API来执行,并返回结果给客户端。

3、红黑树是怎么转的:学一下HashMap的原理就差不多了
回答:红黑树是建立在AVL

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值