现在的位置: 首页 > 数据库 > 正文

MySQL学习之路(八):MySQL中的数据结构和算法

2019年06月04日 数据库 ⁄ 共 1084字 ⁄ 字号 评论关闭

 

数据结构:

 

1. THD 线程描述符(sql/sql_class.h

 

包含处理用户请求时需要的相关数据,每个连接会有一个线程来处理,在一些高层函数中,此数据结构常被当作第一个参数传递。

THD类中包含线程的许多有用信息。处理客户端的连接不是线程的唯一用途,MySQL还有一些系统线程,如从服务器复制进程和信号处理线程

 

2. NET 网络连接描述符(sql/mysql_com.h

网络连接描述符,对内部数据包进行了封装,是clientserver之间的通信协议。

 

3. Item SQL表达式

Item用于实现表达式,如查询条目、函数,whereordergroupon子句等

每个Item类的实例都包含:1SQL语句中某项的类似物,如where  2、一个值  3、数据类型描述符

只要MySQLSQL语句打交道,在赋值、比较、聚合和验证一个SQL元素时,你就会发现MySQL在使用Item类与它的子类

 

4. TABLE 数据库表描述符(sql/table.h

表类定义了MySQL数据库表在MySQL内存中的形式。表以两种形式存在——打开或者关闭状态。MySQL要想使用表,必须先将其打开。表描述类是在被打开时创建。

表描述类创建后被置于表缓存(table_cache)中,等待下一个查询的重用,以提高访问的效率。

数据库表描述符,分成TABLETABLE_SHARE两部分。

 

5. FIELD 字段描述符(sql/field.h

域描述符,对列数据类型以及属性的定义,是各种字段的抽象基类。

 

 


1. 排序算法

MySQL排序采用sort_buffer_size设定的线程独占内存进行排序,如果缓存里内放下要排序的数据,那么MySQL会采取载入所有要返回的值进入缓存排序;如果缓存放不下,则把要排序的列放入缓存排序,然后再回表查询返回结果,如果依然放不下,就会采用归并排序,排好序的部分放入磁盘,载入未排好序的部分继续在内存中排序,然后和磁盘上的部分二路归并,直到排序全部完成。

详细参考:《数据库算法与数据结构系列——排序相关》

 

2. 连接算法:

MySQL关联采用join_buffer_size设定的线程独占内存进行Join操作,Join过程会采用下推算法,如果有WHERE条件,MySQL会先进行过滤,然后才用关联字段去匹配被驱动表,这样可以有效减少参与关联的记录数。

详细参考:《MySQL LEFT/RIGHT JOIN算法效率分析》

 

3. 缓存算法:

MySQL缓存才用LRU算法,由系统维护一个LRU双向链表。

详细参考:《数据库算法与数据结构——Cache&Buffer&Lock

 

抱歉!评论已关闭.