IT评测·应用市场-qidao123.com技术社区

标题: MySQL数据结构和索引 [打印本页]

作者: 农民    时间: 2024-7-26 18:44
标题: MySQL数据结构和索引
一、MySQL数据结构

InnoDB引擎

MySQL默认引擎是InnoDB引擎,这个引擎的重要特点是支持事务和行锁,
数据结构

2.1 二叉树(二叉查找树)


为了解决均衡避免出现这种链表的结构,所以才有了均衡二叉树
2.2 均衡二叉树

均衡二叉树就能解决上面的问题

(1)非叶子节点最多拥有两个子节点
(2)非叶子节值大于左边子节点、小于右边子节点;
(3)树的左右两边的层级数相差不会大于1,
(4)没有值相等重复的节点
均衡二叉树会通过左旋右旋来均衡二叉树,避免变成单向链表结构,但过度要求均衡,会频繁的左右旋,
所以后面就出现了红黑树
2.3 红黑树

红黑树只是减少左右旋,本身还是会左旋和右旋

2.4 B-Tree(均衡多路查找树)


每一个节点都储存完备的一条数据,这是和B+Tree最显着的区别,对于范围查询服从不高。
InnoDB存储引擎中有页(Page)的概念,页是其磁盘管理的最小单元。InnoDB存储引擎中默认每个页的大小为16KB(16384/1024),InnoDB在把磁盘数据读入到内存时会以页为基本单元
假如说:每个磁盘块的大小是1k(一个指针+一个数据节点是1k),那么一页就是有16个磁盘块,如果每次加载一页,也有16个指针,而且每个指针指向一个磁盘块(第二层),那么对于一个三层的b-树来说。能存储的节点数就是:16X16X16 = 4096
当需要查询的数据很多时,也就是十万百万级别的时候,B-Tree结构对于查询的服从就不怎么管用了,因为这个时候树的层级会很高,当存储的数据量很大时同样会导致B-Tree的深度较大,增大查询时的磁盘I/O次数
所以后面的B+Tree进一步优化这件事。
2.5 B+Tree


和B-Tree的重要区别是B+Tree的全部数据存储在叶子结点中,非叶子节点只存储键值信息和指针,而有数据的叶子结点会形成一个双向链表的结构,可以范围查询。
InnoDB存储引擎中页的大小为16KB,一般表的主键类型为INT(占用4个字节)或BIGINT(占用8个字节),指针类型也一般为4或8个字节,也就是说一个页(B+Tree中的一个节点)中大概存储16KB/(8B+8B)=1K个键值(因为是估值,为方便计算,这里的K取值为1000。也就是说一个深度为3的B+Tree索引可以维护1000 * 1000 * 50(最后一层每个磁盘块存多少数据节点,假设是50个) = 5千万条记载。深度一般是三到四层
特点:
二、索引

什么是索引?

数据库管理系统(DBMS)中用于加快数据检索速率的一种数据结构,InnoDB用的是B+Tree的结构
特点:
索引的类型

聚簇索引和非聚簇索引

聚簇索引,每个节点都存有完备的数据
非聚簇索引,只存了Key和指针和ID
回表和索引覆盖:
回表:当查询一个或一些数据的时候,如:select * from table where name = Joker 的时候,假设索引字段是 name,非聚簇索引查到了名字,但需要的是全部的数据,这时候和根据查到ID举行聚簇索引查询,这就是回表。
索引覆盖,以上,如果是  select name from table where name = Joker,需要的数据刚好可以通过非聚簇索引查询,不需要回表,这时候就是索引覆盖。(所以MySQL优化中有一个要求是:避免利用select *)
索引失效

可以利用Explain来查询是否利用了索引
避免索引失效对于进步数据库查询性能至关重要。以下是几种常见的方法来确保索引的有效利用:
1. 最左前缀原则

2. 避免在索引列上举行操作

3. 范围条件后的列不可用

4. 利用覆盖索引

5. LIKE 语句的利用

6. 数据类型的匹配

7. 避免利用 NOT IN 和 NOT EXISTS

8. 选择符合的数据类型

9. 维护索引

10. 避免利用 SELECT *

11. 利用全文索引

12. 限制利用 OR

通过遵循以上原则,可以有效地避免索引失效的问题,从而提升数据库查询的性能。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4