0%

数据管理与分析 - 基础知识

数据库分类

关系型数据库

存储的格式可以直观地反映实体间的关系。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
2
3
4
5
6
7
8
9
SELECT DISTINCT <select_list>
FROM <left_table>
<join_type> JOIN <right_table>
ON <join_condition>
WHERE <where_condition>
GROUP BY <group_by_list>
HAVING <having_condition>
ORDER BY <order_by_condition>
LIMIT <limit_number>
SQL的执行过程:
1
2
3
4
5
6
7
# FROM :作笛卡尔积
# WHERE:过滤
# GROUP BY:分组
# HAVING:过滤
# SELECT:列表
# 执行 DISTINCT 子句
# 执行 ORDER BY 子句

每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只是最后一步生成的表才会返回给调用者。

四、B+树

B+树是B树的一种变形形式,B+树上的叶子结点存储关键字以及相应记录的地址,叶子结点以上各层作为索引使用。一棵m阶的B+树定义如下:

(1)每个结点至多有m个子女;

(2)除根结点外,每个结点至少有和∟m/2」个子女,根结点至少有两个子女;

(3)有k个子女的结点必有k个关键字。

B+树的查找与B树不同,当索引部分某个结点的关键字与所查的关键字相等时,并不停止查找,应继续沿着这个关键字左边的指针向下,一直查到该关键字所在的叶子结点为止。

五、列存数据库中的查询计划如何执行

https://draveness.me/whys-the-design-olap-column-oriented/