现在,我假设您都知道什么是SQL,或者您有SQL的经验,或者您使用SQL已有多年。 我认识许多人,他们对SQL非常了解,甚至创建了许多基于SQL的项目,他们都不知道什么是SQL引擎或SQL数据库引擎的实际工作方式。 显然没有人关心SQL引擎的内部工作或其他方面,因为在不知道SQL如何工作的情况下,我们仍然可以使用任何SQL程序来创建和访问数据库。
## SQL是编程语言还是查询语言?
使用SQL时,我们可以互换使用查询和编程语言,许多开发人员将SQL称为一种特殊的编程语言,因为SQL引擎包含两个组件:编译器和垂直计算机,编译器将查询命令编译为过程,而虚拟机则运行该过程。 SQL引擎编译和执行SQL查询的概念使其成为一种编程语言。 因此,如果有人说SQL是一种编程语言,那么在某种程度上他将被认为是正确的。
如果我们任何一种编程语言都可以创建CRUD操作程序,为什么还要使用SQL?
的确,使用任何一种编程语言,我们都可以创建一个可以执行简单的CRUD(创建读取更新和删除)操作的程序,但是当涉及到复杂的查询时,我们必须用几行等价的代码编写数百行SQL。
SQL概述
SQL代表结构化查询语言,可以被称为编程语言或查询语言,这是SQL与关系数据库进行交互的主要目的,其中关系数据库以表格形式存储数据。 SQL可以管理大量数据,尤其是如果数据是同时写入的,并且我们在该数据上有许多转换。
当用户使用SQL进行数据管理时,用户可以在数据库之间执行创建,检索,更新和删除数据的功能。 有各种关系数据库管理系统(DBMS),例如MySQL ,SQLite,Postgres SQL等,它们都提供相同的功能。
数据库中有一些术语,例如数据库服务器,数据库引擎或数据库管理系统。 在数据库中,我们可以互换使用这三个术语,因此当我们说SQL引擎或SQL Server时,不要混淆,它们都是相同的。
什么是SQL引擎?
SQL引擎是一种收集和解释SQL命令的软件,因此可以在关系数据库上执行适当的操作。 SQL引擎的目的是从数据库中创建,读取,更新和删除(CRUD)数据。
SQL引擎或SQL Server数据库引擎包括两个主要组件:存储引擎和查询处理器,如今,一些现代SQL DBMS包含多个存储引擎。 我们有许多类型的SQL引擎,它们都有不同的体系结构,但是用于执行相同的目标,包括对数据库的CRUD操作和许多其他功能。
SQL已覆盖在线市场的很大一部分,许多企业将其SQL系统用于在线事务处理和在线分析处理。
SQL数据库引擎如何工作?
表面上我们都知道,SQL的编译器编译查询,而虚拟机执行编译的查询。 现在让我们讨论数据库引擎如何工作。
SQL具有查询编译和执行过程的许多阶段。 每个SQL数据库引擎都包含两个主要组件:编译器和虚拟机,以执行查询。 编译器读取查询并将该查询转换为适当的字节码,然后由虚拟机评估该字节码并向客户端返回适当的响应。
查询的完全执行将类别分为3个主要阶段
- 编译(解析,检查和语义)
- 捆绑
- 最佳化
- 执行中
编译解析
这是编译过程的一部分,在编译解析过程中,查询语句被标记为带有适当的词法和从句的单个单词。
编译检查语义
编译符号学检查语句的有效性,并将其与系统目录匹配。 此编译阶段验证查询是否有效,还验证用户执行该语句的权限。
编译绑定
它为输入的查询语句创建相应的二进制表示形式。 所有SQL Server引擎都具有此编译状态,在该状态下将生成字节码。
在编译的这一阶段,该语句已被编译,现在将其发送到数据库服务器以进行优化和执行。
最佳化
它为字节码优化了最佳算法。 此功能也称为查询优化器或关系引擎。
执行中
虚拟机获取优化的字节码并执行。
SQL STATEMENT --> Parsing -->Binding --> Query Optimization --> Query Execution --> Result
注意:解析编译过程不需要数据库的任何许可,这使其成为最快的编译处理阶段。
SQL将数据转换为表
SQL用C语言编写,它使用Binary-Tree的原理,使传入的数据存储在行和列中。 在二叉树结构中,我们有几个分支始终指向新的数据元素,SQL数据库遵循相同的结构,在该结构中,数据被转换成表,其中每一列和每一行数据彼此指向。
SQL数据库引擎简而言之
SQL引擎将查询处理为多阶段。 查询的处理可以从一个关系DBMS到另一个关系DBMS。 在第一阶段,查询将被解析并转换为兼容格式,例如JASON文件,然后进行另一个编译过程,以检查已解析文件的语义,在编译的最后阶段,已解析文件将转换为相应的字节码。
第二步是优化,在该优化中,将适当的算法(例如排序,搜索等)应用于字节码。 最后,虚拟机执行代码并为客户端提供适当的结果。
什么是SQL Server存储引擎?
它是用于在磁盘和内存之间执行CRUD(创建,读取,更新和删除)操作的软件。
结论
要创建数据库环境,我们需要SQL数据库引擎,并且为了构建数据库引擎,我们经常使用低级编程语言(例如C ++或C),因为它们使用户可以控制内存管理,而高级编程则缺少这种语言在高级编程语言中,语言是由操作系统自动完成的。 SQL引擎是跨平台的,开发人员可以使用不同的平台来构建某些程序,但是所有平台都可以与SQL引擎链接以实现数据库功能。
From: https://hackernoon.com/how-sql-database-engine-work-483e32o7