数据库中的数据结构以及查询过程

amang2000
发布于 2022-4-30 20:41
浏览
0收藏

作者 | 川石信息
来源 | 今日头条

一、数据结构

数据结构通常会影响两个维度的优化:一是响应时间;二是资源消耗。

● 选择时数据类型的影响

选择数据类型通常应该遵守以下规则:

1.越小越好

所谓的越小越好是指数据类型所占的字节空间,即所占的内存情况。

2.数据类型越简单越好

通常来说越简单的数据类型,在处理时所消耗的CPU时间频率是最少的,数据类型越复杂,所消耗的CPU时间频率就会越长。例如时间、日期、IP地址等,之所以会这样是因为复杂的数据类型在比较时不是简单的ACSII比较,必须借用专门的函数来比较。

3.避免使用NULL

在定义表时,避免允许使用NULL,如果非要使用也是使用NOT NULL,因为NULL表示不是一个值,这样就不好比较。

● 常见数据类型说明

1.整型

整数又分为:TINYINT、smallint、mediumint、int、bignit,分别所点的字节数为8、16、24、32、64个字节空间

2.实型

实型分为:Float、double,分别占4个和8个字节

3.字符

字符类型又分两种:char和varchar

char是固定的大小,例如char(10),占10个字节。

varchar可变长度,例如varchar(10),如果执行我们没有用到10个字符,那么用到多少个就内存就会分配多少个,但是最多不超过10个字符,最后会有额外的字节用来做标识的。

4.日期与时间

日期与时间所点字节数与日期和时间的格式无关,固定的占8个字节

二、 查询过程数据库中的数据结构以及查询过程-鸿蒙开发者社区

所有我们输入的SQL语句最后都会变成一个可执行的计划,放在CPU中来理解就是一个任务,每个CPU(如果CPU是单核的话)那么只同时处理一个任务,即CPU只能同时处理一个线程。

查询在运行的有不同状态:

1.休眠

等待新的查询

2.查询

线程正在执行查询或将查询的结果返回到客户端

3.锁定

表示表处于锁定状态

4.分析与统计

分析和统计相关的信息,并对查询进行优化

5.拷贝数据到临时表

将结果集的数据拷贝临时表

6.排序结果

对查询的结果进行排序

7.发送数据

发送数据一般理解将数据返回到客户端,也可以是查询状态之间的数据传递。

查看当前查询状态的命令如下:

SHOW FULL PROCESSLIST

查询过程的步骤如下:

1.客户端向服务器发送请求

借用于MYSQL的协议将客户端的请求发送到服务器端。MYSQL协议是一种半双工协议,即可以发送也可以接收数据。但不能同时发送和接受数据。

2.查询缓存

检查查询结果在缓存是否存在,如果在缓存就存在那么直接将缓存的数据发送给客户端即可,如果缓存中不存在我们需要的结果数据,那么到第三个步骤。

如果判断缓存中是否有我们需要的结果集的数据,是通过哈希查询来确定,是一种精确的哈希方法,并区别分大小写。

3.解析与优化查询

MYSQL会将我们的语句变成一个解析树,生成解析树会去检查语义、语法是否错误,判断表的信息是否正确等。

查询优化器是对我们的SQL语句进行优化最后变成一个查询执行计划。

通常优化的内容的包括以下部分:

  • --->对连接表进行重新排序
  • --->将外链接变成内链接进行查询
  • --->代数等价法则,即关系运算符的处理
  • --->优化聚合函数: count()、min()、max()
  • --->计算和减少常量表达式
  • --->覆盖索引
  • --->子查询优化,将多个子查询转换为独立查询
  • --->尽早终结,是指执行的查询语句不要写的过长
  • --->优化in集合,优化in集合中的关系谓词

4.生成执行计划

将语句优化好的,会重新生成一个解析树,再将这个解析树生成一个可执行的计划。

5.查询引擎

对API函数对引擎进行操作,通过引擎到数据库中取数据。再将数据发送到客户端。

MYSQL数据库支持第三开发的引擎。

收藏
回复
举报
回复
    相关推荐