Mysql查询优化技术之数据库和关系代数

1. 什么是关系型数据库?

1.1 什么是数据库管理系统?

1)是一种操纵和管理数据的大型软件,用于建立、使用和维护数据,简称DBMS;

2)它对数据进行统一的管理和控制,以保证数据的安全性和完整性;

3)用户通过DBMS访问数据库中的数据,数据库管理员也通过DBMS进行数据库的维护工作;

4)它可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据;

5)DBMS提供数据定义语言DDL(Data Definition Language)和数据操作语言DML(Data Manipulation Language),供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作;

目前市面上有一种说法,只要做数据处理,软件规模达到一定程度,似乎都称为了数据库。如:HBase/MongoDB等等。而且我们通常听到的这些NOSQL或NEWSQL数据库,通常被认为是分布式数据库,一谈到分布式我们就需要了解CAP理论,也即:

Consistency(一致性):数据一致更新,所有数据变动都是同步的;

Availability(可用性):好的响应性能;

Partition tolerance(分区容忍性):可靠性;

CAP理论实践证实在分布式中要达到三者是不可能的,必须牺牲其中的一点。所以目前绝大部分企业内部都放弃了P而仅仅达到CA的目的。所以我们认为其实这些称为的数据库其实并不是严格意义上的数据库,因为我们衡量是否是数据库的标准是ACID:

ACID,是指在数据库管理系统(DBMS)中事务所具有的四个特性:

1)原子性(Atomicity)

2)一致性(Consistency)

3)隔离性(Isolation)

4)持久性(Durability)

1.2 什么是关系型数据库管理系统?

历史上的几种类型的数据库:

1 层次型

2 网状型

3 关系型

关系数据库,是建立在关系数据库模型基础上的数据库,借助于关系代数等概念和方法来处理数据库中的数据,同时也是一个被组织成一组拥有正式描述性的表格,该形式的表格作用的实质是装载着数据项的特殊收集体,这些表格中的数据能以许多不同的方式被存取或重新召集而不需要重新组织数据库表格。我们来看下MYSQL数据库的模型:

MYSQL模型

我们所说的优化主要集中在Parser和Optimizer两个部分上,前者主要是逻辑优化后者主要是物理优化(比如利用索引)

1.3为什么我们需要学习MySQL/PostgreSQL ?

趋势1:云计算,淘汰大部分的运维人员;

趋势2:云数据库,淘汰大部分以商业数据库为职业的DBA;

趋势3:电商等兴起,对开源数据库技术的人员需求增多;

趋势4:去IOE化(就是去掉IBM的小型机、Oracle数据库、EMC存储设备,代之在开源软件基础上开发的系统)等运动背后的商业成本和安全问题,促进开源产业发展;

趋势5:MySQL和PostgreSQL为代表的开源数据库自身正蓬勃发展中。

1.4为什么我们需要掌握查询优化技术 ?

从数据处理的角度看:

数据库的OLAP(联机分析处理)型应用要多于OLTP(联机事务处理过程)型应用。大数据技术目前处理了一部分非结构化的数据,但分布式数据库技术的发展,将使得数据库技术进一步发展甚至出现革命性的进步进而与现行的hadoop/spark等技术争夺数据分析的阵地。而查询优化技术因此二者得益继续发展。

从当下技术发展的趋势看:

大数据背景下,盛行几十年的SQL查询技术焕发了新的生机,不仅在数据库中占有半壁江山,而且在大数据处理技术下,各种SQL查询接口/功能层异军突起。而查询优化技术因具有普适性得以继续使用。

2. 什么是关系代数?和数据库之间的关系是怎么样的?

数学中,关系代数是支持叫做逆反(converse)的对合一元运算的剩余布尔代数。激发关系代数的例子是在集合 X 上的所有二元关系的代数 ,带有 R·S 被解释为平常的二元关系复合。关系代数的早期形式形成于十九世纪德·摩根、皮尔士和 Ernst Schröder 的工作。它今日的纯等式形式是阿尔弗雷德·塔斯基和他的学生在 1940 年代开发的。 1970年E.F. Codd发表了数据的关系模型论文。Codd提议这样一种代数作为数据库查询语言的基础,称为关系代数。

Codd的关系代数的六个原始运算是“选择”、“投影”、笛卡尔积(也叫做“叉积”或“交叉连接”)、并集、差集和“重命名”。(实际上,Codd忽略了重命名,而ISBL的发明者显著的包括了它)。这六个运算在省略其中任何一个都要损失表达能力的意义上是基本的。已经依据这六个原始运算定义了很多其他运算。其中最重要的是交集、除法和自然连接。事实上ISBL显著的用自然连接替代了笛卡尔积,它是笛卡尔积的退化情况。 第一个基于Codd的代数的查询语言是ISBL,许多作者都认同这个先驱的工作展示了一个使Codd的想法成为有用语言的方式。

关系代数是一种抽象的查询语言,用对关系的运算来表达查询,作为研究关系数据语言的数学工具。

关系代数的运算对象是关系,运算结果亦为关系。关系代数用到的运算符包括四类:

1)集合运算符

2)专门的关系运算符

3)算术比较符

4)逻辑运算符

比较运算符和逻辑运算符是用来辅助专门的关系运算符进行操作的,所以按照运算符的不同,主要将关系代数分为传统的集合运算和专门的关系运算两类。

3. 什么是查询优化技术?

从广义的查询优化来说,查询优化技术包括了几个方面:

1) 查询重用;

2) 查询重写规则;

3) 查询算法优化技术;

4) 并行查询优化技术;

5) 分布式查询优化技术;

从狭义来说,查询优化技术只涉及2个方面:

1) 逻辑优化

2) 物理优化

前者更注重对SQL本身的优化,依据关系代数做一定的等价变换做一些逻辑优化,后者是根据数据读取、表连接方式、表连接顺序、排序等技术进行优化。

4. 什么是MYSQL的查询优化?

MYSQL的查询优化主要涉及几个方面:

1) 查询重用;

2) 查询重写规则;

3) 查询算法优化技术;

其实还有部分的并行优化,但是和ORACLE等商业数据库相比还是弱了些。所以这里不写入。

5. 什么是数据库调优?

数据库调优可以使数据库应用运行得更快,其目标是使数据库:

1) 有更高的吞吐量

2) 更短的响应时间

这里需要强调等是,被调优的对象是整个数据库管理系统总体。

数据库调优的方式通常有如下几种:

1)人工调优

主要依赖于人,效率低下;要求操作者完全理解常识所依赖的原理,还需要对应用、数据库管理系统、操作系统以及硬件有广泛而深刻的理解;

2)基于案例的调优

总结典型应用案例情况中数据库参数的推荐配置值、数据逻辑层设计等情况,从而为用户的调优工作提供一定的参考和借鉴。但这种方式忽略了系统的动态性和不同系统间存在的差异;

3)自调优

为数据库系统建立一个模型,根据“影响数据库系统性能效率的因素”,数据库系统自动进行参数的配置。一些商业数据库,实现了部分自调优技术。

数据库调优主要分为五个阶段: 数据库调优阶段

数据库调优五个阶段的主要技术

第一阶段:

1)应用情况的估算

应用的使用方式(把业务逻辑转换为数据库的读写分布逻辑,以是读多写少还是读写均衡等来区分OLTP和OLAP;应用对数据库的并发情况、并发是否可以池化等)、数据量、对数据库的压力、峰值压力等做一个预估;

2)系统选型策略

确定什么样的数据库可以适用应用需求,并确定数据库是使用开源的还是商业的,是集使用群还是单机的系统,同时对操作系统、中间件、硬件、网络等进行选型。

第二阶段:

数据模型的设计

主要是根据业务逻辑,从几个角度考虑表的逻辑结构,内容如下:

1)E-R模型设计:遵循E-R模型设计原理。偶尔的适当程度的非规范化可以改善系统查询性能;

2)数据逻辑分布策略:目的是减少数据请求的不必要的数据量,把用户需要的数据返回;可用的技术如分区、用E-R模型分表等(如互联网企业典型的用法,根据业务的不同,进行分库、分表等操作);

3)数据物理存储策略:目的是减少IO,如启用压缩技术、把索引和表数据的存储分开,不同的表数据分布于不同的表空间,不同表空间分布在不同的物理存储上(尤其是读写量大的表空间分布在不同的物理存储上)、日志、索引和数据分布在不同的物理存储上等;

4)索引:在查询频繁的对象上建立合适的索引,使索引的正效应大于负效应(索引的维护存在消耗)。

第三、四阶段:

1)SQL设计

编写正确的、查询效率高的SQL语句。这依据的主要是“查询重写规则”,编写语句的过程中要注意,要有意识地保障SQL能利用到索引。

2)数据库功能的启用

数据库为提高性能提供了一些功能,可合理使用,具体如下:

2.1)查询重用:根据实际情况进行配置,可缓存查询执行计划、查询结果等;

2.2)数据库参数的设置:可设置合适的参数如数据缓冲区等;

2.3)模型系统预运行。在备用系统上模拟实际运行环境,加大压力进行系统测试,提前发现问题。

第五阶段:

1)系统监控与分析。在工业环境下,加强对系统的运行监控和日常的分析工作,具体如下:

1.1)应用系统表现:收集用户对应用系统的使用意见、系统存在问题等,因为这些可能是用户在第一时间发现的;

1.2)OS环境监控:实时监控CPU、内存、IO等,并对比实时情况与历史正常情况;

1.3)据库内部状况监控:一些数据库提供系统表、视图、工具等手段,向用户提供数据库运行过程中内部状况的信息,如锁的情况,这些都需要实时监控,并对比实时情况与历史正常情况;

1.4)日志分析:在数据库的日志、操作系统的日志中找出异常事件,定位问题。

撰写日期 March 4, 2018