数据库分类
关系型数据库
存储的格式可以直观地反映实体间的关系。SQL表达能力很强。
非关系型数据库
(1)键值对存储(key-value):代表软件Redis,它的优点能够进行数据的快速查询,而缺点是需要存储数据之间的关系。
(2)列存储:代表软件Hbase,它的优点是对数据能快速查询,数据存储的扩展性强。而缺点是数据库的功能有局限性。
(3)文档数据库存储:代表软件MongoDB,它的优点是对数据结构要求不特别的严格。而缺点是查询性的性能不好,同时缺少一种统一查询语言。
(4)图形数据库存储:代表软件InfoGrid,它的优点可以方便的利用图结构相关算法进行计算。而缺点是要想得到结果必须进行整个图的计算,而且遇到不适合的数据模型时,图形数据库很难使用。
数据库的需求变化
数据量和负载激增
- 扩展性变得更重要
- 性价比变得更重要
云计算的普及
- 易用性变得更重要
关系型数据库的查询执行过程
SQL –> AST(解析树)–> PLANS(查询计划)–> BEST PLAN –> 执行 –> RESULTS
一、语法解析器和预处理器
1.MySQL解析器通过关键字将SQL语句进行解析,并生成对应的解析树;
2.MySQL解析器将使用MySQL语法规则验证和解析查询,eg:验证是否使用错误的关键字、使用关键字的顺序是否正确、验证引号是否前后匹配等;
3.预处理器根据一些MySQL规则进行进一步检查解析树是否合法,eg:检查数据表和数据列是否存在,解析名字和别名是否有歧义;
4.下一步预处理器验证用户权限,查看用户是否有操作权限,通常很快;
二、查询优化器
1.优化器的作用就是找到最好的执行计划;
2.语法树被认为是合法后,优化器将MySQL语句转换为执行计划,一条查询可以有多种执行方式,最后都返回相同的结果;
3.生成执行计划过程
4.MySQL使用基于成本的优化器(CBO cost-based optimizer),会预测一个查询使用某种执行计划的成本,选择其中成本最小的一个;
5.导致MySQL优化器选择非最优执行计划的原因
6.MySQL可以处理的优化类型
三、EXAMPLE:
1 | SELECT DISTINCT <select_list> |
SQL的执行过程:
1 | # FROM :作笛卡尔积 |
每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只是最后一步生成的表才会返回给调用者。
四、B+树
B+树是B树的一种变形形式,B+树上的叶子结点存储关键字以及相应记录的地址,叶子结点以上各层作为索引使用。一棵m阶的B+树定义如下:
(1)每个结点至多有m个子女;
(2)除根结点外,每个结点至少有和∟m/2」个子女,根结点至少有两个子女;
(3)有k个子女的结点必有k个关键字。
B+树的查找与B树不同,当索引部分某个结点的关键字与所查的关键字相等时,并不停止查找,应继续沿着这个关键字左边的指针向下,一直查到该关键字所在的叶子结点为止。