首页 > 数据库 >SQL Server Query Processing / SQL Server 查询处理过程

SQL Server Query Processing / SQL Server 查询处理过程

时间:2023-08-02 16:07:26浏览次数:41  
标签:查询处理 Server parsing SQL 解析 代化 stage

/* 推荐一个SQL Server 博客,后面准备把这个博客文章全部翻译。SQL Server 主页连接:https://logicalread.com/category/databases/sqlserver/ */

查询处理--由 SQL Server 中的关系引擎执行,它获取编写的 T-SQL 语句并将其转换为可以向存储引擎发出请求并检索所需结果的过程。

SQL Server 需要四个步骤来处理查询:分析、代化、优化和执行。

前三个步骤都由关系引擎执行;第三步输出的是优化计划,在此期间,将调用存储引擎以检索将成为正在执行的查询结果数据。

SQL Server Query Processing / SQL Server 查询处理过程_Query Processing

以下简要讨论解析和代化。

解析在分析阶段,SQL Server 对源代码(T-SQL 语句)执行基本检查。此分析查找无效的 SQL 语法,例如不正确地使用保留字、列名和表名等。 如果解析完成且没有错误,它将生成一个解析树,该树将传递到查询处理的下一阶段,即绑定。解析树是查询的内部表示形式。如果分析检测到任何错误,进程将停止并返回错误。

代化阶段也称为绑定阶段。在早期版本的 SQL Server 中,此阶段称为规范化。在代化过程中,SQL Server 对分析树执行多个操作,然后生成传递查询树给查询优化器。 代化期间执行的步骤遵循以下模型:

  • 步骤 1:名称解析 — 确认所有对象都存在并在用户的安全上下文中可见。这是检查表和列名称以确保它们存在并且用户有权访问它们的位置。
  • 步骤 2:类型派生 — 确定解析树中每个节点最终类型
  • 步骤 3:聚合绑定 — 确定在何处进行任何聚合
  • 步骤 4: 组绑定 — 将任何聚合绑定到相应的选择列表

在此阶段检测到语法错误。如果遇到语法错误,优化过程将停止,并将错误返回给用户。


Quoting:SQL Server Query Processing

SQL Server Query Processing

Query processing is performed by the Relational Engine in SQL Server. It is the process of taking the T-SQL statements you write and converting them into something that can make requests to the Storage Engine and retrieve the results needed.

SQL Server takes four steps to process a query: parsing, algebrizing, optimizing, and execution. They are shown in Figure 1. The first three steps are all performed by the Relational Engine. The output of the third step is the optimized plan that is scheduled, and during which calls are made to the Storage Engine to retrieve the data that becomes the results of the query you are executing.

Figure 1.

The following sections briefly discuss parsing and algebrizing.

Parsing

During the parsing stage SQL Server performs basic checks on the source code (your T-SQL batch). This parsing looks for invalid SQL syntax, such as incorrect use of reserved words, column and table names, and so on.

If parsing completes without errors, it generates a parse tree, which is passed onto the next stage of query processing, binding. The parse tree is an internal representation of the query. If parsing detects any errors, the process stops and the errors are returned.

Algebrizing

The algebrization stage is also referred to as the binding stage. In early versions of SQL Server this stage was referred to as normalization. During algebrizing, SQL Server performs several operations on the parse tree and then generates a query tree that is passed on to the Query Optimizer.

The steps performed during algebrizing follow this model:

  • Step 1: Name resolution — Confirms that all objects exist and are visible in the security context of the user. This is where the table and column names are checked to ensure that they exist and that the user has access to them.
  • Step 2: Type derivation — Determines the final type for each node in the parse tree
  • Step 3: Aggregate binding — Determines where to do any aggregations
  • Step 4: Group binding — Binds any aggregations to the appropriate select list

Syntax errors are detected during this stage. If a syntax error is encountered, the optimization process halts and the error is returned to the user.

标签:查询处理,Server,parsing,SQL,解析,代化,stage
From: https://blog.51cto.com/xingjia/6939226

相关文章

  • MySQL8.0 JSON数据类型
    (目录)JSON数据类型MySQL8.0支持原生的JSON数据类型。JSON数据类型存在以下优点自动验证存储在json列中的JSON文档,无效文档会产生错误优化存储格式。json列中的文档被转换为内部格式,可以直接对文档元素进行快速读取访问。JSON值JSON值类型在MySQL中,JSON值可以是字符串/数......
  • Sqlalchemy框架连接达梦数据库插入数据无法保存
    问题点:用户使用Sqlalchemy框架插入数据,无法保存数据代码报错复现信息如下:ValueError:invalidliteralforint()withbase10: 排查思路:确认插入的数据,是否符合表字段定义的数据类型排除法测试每个字段的插入情况创建模拟表结构,插入数据Python代码创建测试表1创......
  • GaussDB技术解读系列之SQL Audit,面向应用开发的SQL审核工具
    本文分享自华为云社区《​​GaussDB技术解读系列之SQLAudit,面向应用开发的SQL审核工具》​​,作者:华为云数据库和应用迁移专家。前言我们先从一个SQL语句说起(以某传统单机数据库为例)。也许这就是我们业务代码中潜藏的一个SQL语句,对于一个普通开发者来说,这个语句编写工整,逻辑清......
  • 8、MySQL数据表基本数据类型
    数字整数还有其他的数据类型,分成了几种:1、数字类型2、字符串类型3、时间类型总共可以分成这么几类,咱们的数字里面有个int,除了int还有什么呢,还有tinyint、bigint,它们都是int,它们之间的区别是什么,它是不是能表示的数据范围是不一样的。比如对于tinyint,它只能表示有符号的-128......
  • mysql添加用户并分配权限
    CREATEUSER'username'@'ip'IDENTIFIEDBY'password';GRANTprivilegesONdatabase.tableTO'username'@'ip';其中:username替换为用户名,例如“bigman”ip替换为可访问数据库的ip,例如“127.0.0.1”“192.168.1.1”,使用“%”表示不限制远程连接ippassw......
  • 【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开
    项目目标本次技术调研和分析报告,主要面向于总体分析和建立对应的MySQL数据库所需要从5.7版本升级到8.0版本后的Java应用服务项目的调整以及功能变动报告分析。MySQL8.0引入一些性能改进,例如新的查询优化器和索引算法。升级后,可以通过重新评估和优化项目中的SQL查询和索引来利用新......
  • SQL统计重复的方法
     用一道力扣简单题为例,看完题目就知道它要我们输出的的重复的email,那我们就要知道SQL中的查询重复的信息有哪些方法,下面是讨论区大佬的方法 第一个是运用having和groupby的方法,是一种常用的,简单高效的方法,第二种相比第一种就复杂很多,先创建两个临时表,Personp1表示从Person......
  • MYSQL启动的参数
    MYSQL启动的参数--basedir=/usr/local/mysql--datadir=/usr/local/mysql/data--plugin-dir=/usr/local/mysql/lib/plugin--user=mysql--log-error=/usr/local/mysql/log/mysqld_error.log--pid-file=/usr/local/mysql/data/mysqld.pid 启动参数可以组合使用,如下/usr/local/my......
  • 千万级数据的表,我把慢sql优化后性能提升30倍!
    分享技术,用心生活背景:系统中有一个统计页面加载特别慢,前端设置的40s超时时间都加载不出来数据,因为是个统计页面,基本上一猜就知道是mysql的语句有问题,遗留了很久没有解决,正好趁不忙的时候,下定决心一定把它给搞定!1.分析原因(mysql5.7)执行一下问题sql,可以看到单表查就需要61......
  • mysql在执行innobackupex增量备份时报错cannot open *****/xtrabackup_checkpoints
    问题描述:mysql在执行innobackupex增量备份时报错cannotopen*****/xtrabackup_checkpoints,如下所示:数据库:mysql5.7.21说明:此次测试环境为从节点.1、异常重现[mysql@mysql-leo-perslave~]$/usr/bin/innobackupex--defaults-file=/home/mysql/etc/my.cnf--socket=/mysql/da......