专业的SQL Server、MySQL数据库同步软件

我是一名项目经理,从汽车行业转向IT。

由于我目前正在研究与文件和IO相关的操作,因此有一个使注册表简单的功能,因此,为了加深印象,我在实际数据库中的数据上预览了这些操作。

1.数据库中最常见的慢查询优化方法是什么?

添加索引

2.为什么添加索引可以优化慢查询?

3.哪些数据结构可以提高查询速度?

4.由于这些数据结构可以优化查询速度,因此Mysql为什么选择B +树?

页(页)是存储器的逻辑块。操作系统通常将主存储器和磁盘存储区划分为大小相等的连续块。每个存储块称为一个页面(在大多数操作系统中,页面大小通常为4kb,可调),主内存和磁盘交换数据以页面为单位。

预读磁盘通常是页面的整数倍,innnoDb默认为16kb。

索引是一种数据结构,可以帮助Mysql有效地获取数据。 (类似于RAF随机访问期间的指针,游标,.seek()操作。wirte()操作中还存在偏移量和长度设置。但是,这种形式的实时性能很差。)

索引存储在文件系统中。 (减少IO体积和IO频率是关键)

索引文件的存储格式与存储引擎有关。 (例如innoDb,myISAM等)

哈希

二叉树

B树

B +树

1)哈希表是内存中使用的数据结构。

Java 增加log java 增加数据库查询索引_Java 增加log

缺点:

1.占用内存空间

2.适用于等效查询,但不适用于更多范围查询。

2)二叉树可以分为:BS树,AVL树和红黑树。

共享网站:

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

可以完成数据结构的可视化。

红黑树是最终形式,它优化了AVL树,平衡了插入和搜索的复杂性,并具有以下属性:

属性1:每个节点为黑色或红色。

性质2:根节点为黑色。

性质3:每个叶子节点(NIL)是黑色的。

属性4:每个红色节点的两个子节点必须为黑色。

属性5:从任何节点到每个叶节点的路径都包含相同数量的黑色节点。

Java 增加log java 增加数据库查询索引_子节点_02

但是仍然存在缺点:

1.如果深度太深,将导致更多的IO时间并影响数据读取的效率。

3)B树的本质是多叉树。

Java 增加log java 增加数据库查询索引_数据结构_03

FF

它是根据磁盘读写规则设计的,其性能优于红色和黑色的树。它的多叉搜索效率更高,层数更少,IO时间更少。

4)B +树

两个功能:

首先,非叶子节点不存储数据,仅放置指针和关键字,大大增加了整体数据存储量。

其次,在叶节点之间添加双向索引,以便B +树可以同时具有两个指针,一个指针从根开始并逐层搜索,而另一个可以直接从由其形成的有序链接列表中遍历。叶节点。

Java 增加log java 增加数据库查询索引_数据_04

优点:

1.B +树的级别较少:与B树相比,B +在每个非叶子节点中存储的关键字更多,并且该树的级别更少,因此查询数据更快;

2.B +树的查询速度更稳定:B +所有关键词数据地址都存储在叶节点上,因此每次的搜索次数相同,因此查询速度比B树更稳定;

3.B +树自然具有排序功能:B +树的所有叶节点数据都构成一个有序的链表,这在查询大小范围内的数据时更加方便,数据非常紧凑,并且缓存命中率也将高于B树。

4.B +树的全节点遍历更快:整个树的B +树的遍历只需要遍历所有叶节点,而无需像B树那样遍历每一层,这有利于数据库全表扫描。 B树相对于B +树的优势在于,如果频繁访问的数据非常靠近根节点,并且B树本身的非叶子节点具有关键字数据的地址,那么此数据检索将是比B +树更好,更快。

本文仅涉及概念理论,我将在后面讨论。