《Microsoft Sql server 2008 Internals》读书笔记--第八章The Query Optimizer(1)

Windows MCP 安装教程:让 AI 代理与 Windows 系统无缝交互 通过以上步骤,你已经成功安装和配置了 Windows MCP 服务。现在你的 Cursor 编辑器可以通过 MCP 协议与 Windows 系统进行深度交互,AI 代理能够:启动和控制应用程序执行系统命令自动化 UI 操作获取系统状态信息这为 AI 辅助开发和工作流程自动化提供了强大的基础。如果你在使用过程中遇到任何问题,欢迎在评论区讨论或查看项目的官方文档。 阅读详情
《Microsoft Sql server 2008 Internals》索引目录:

《Microsoft Sql server 2008 Internals》读书笔记--目录索引

SQL Server内置的查询优化器负责对一个给定的SQL语句执行判断作出最合理的查询计划。因为查询优化器并没有过多的内容展示于外界,因此不像SQL引擎中的其他组件那样为人熟知。第八章(The Query Optimizer)主要介绍查询优化器及其工原理,本章读完后,你应该会加深在较高层次的优化架构的理解,并熟知一个特定的查询计划为什么会被查询优化器所采用。此外,你应该能解决特定的案例,比如查询优化器没有选择预期的执行计划,以及什么因素影响了优化器的选择。 

第八章是本书的另外核心技巧之一--查询优化,它在底层数据存储的基础上,主要介绍对已有的SQL语句或查询进行针对性的测试和优化方法。这里有一些实用的技巧。本章分两部分:第一部分介绍了查询优化器的基本机制,包括它使用的高级架构及如何定义每个计划的一整套替代方案。第二部分查询优化器的特定领域,以及它们如何适应Framwwork。例如“如何选择索引?”、“策略如何使用?”、“我如何理解更新计划?”等。本文先开个头。

 ■总览

对于一个简单的查询,基本的编译“管道(pipeline)” 如下:
邀月工作室

 当一个查询被编译时,首先被解析为一个等价的树表达式(tree representation)。对符合SQL语法的合法表达式,第二阶段是执行一系列的(针对这个表达式的)验证步骤,这个阶段称为绑定(Binding),在此阶段中,树中的列和表与存储在元数据中的列和表进行比较, 以确保列和表存在。这个阶段对用户是可见的。这一阶段也对查询作语义检查,以确保查询是有效的。比如确保绑定到GROUP BY操作的列是有效的。一旦查询树被绑定并被判定为一个有效的查询,查询优化器接管查询,并开始评估不同可能的查询计划。查询优化器执行查询并返回给系统执行。执行组件运行查询,并返回查询的结果。

SQL Server查询优化器提供了一些附加内容,来扩展这个图,以方便开发人员和DBA。比如优化计划被缓存,因为它们对生产而言成本昂贵,且经常被重复执行。当底层数据被充分改变时,旧的查询计划被重新编译。SQL Server也支持T-SQL语言,这意味着在SQL引擎中,可以一次批量处理多个SQL语句请求。查询优化器不考虑批编译和工作和工作量分析,因此本章主要关注于单个查询编译。

 ■树格式(Tree Format)

 当你提交一个SQL查询到查询处理器时,SQL字符串被解析为一个树表达式,树的每个节点代表了一个将要被执行的查询操作。如下语句:

可能的查询如下:

 邀月工作室

 在整个编译进程中,查询处理器实际上使用不同的查询树格式,例如查询优化器执行的一个任务是根据预期结果的逻辑描述,转换树为一个能被执行的实际的物理计划。最明显的是转换一个逻辑join(比如inner join)为一个物理join(一个哈希join,merge join或嵌套循环join)。Most of the  tree formats are pretty close to each other。(这句邀月真不知如何翻译?)

 ■优化是什么

 目前为止,我们讨论的是转换一个逻辑查询为等价的物理查询计划。查询优化器的另外一个任务是在众多查询计划中找到一个高效的查询计划。
首先,这个计划应该是看起来对每个SQL查询而言都是一个“明显的”最佳计划,并且应该选择尽可能快的计划。实际上,查询优化实际上是一个非常困难的问题。考虑下面的查询:

这个查询有多个可能的实现计划,因为inner join可能被以不同的顺序计算。事实上,查询计划的可能数量实际上比N!=N*(N-1)*…………要大得多。随着查询中表数量的增加,可供考虑的替代方案集迅速增加,变得计算机也无法计算。各种可能查询计划的存储也成了一个问题。在一个32-bit的Intel x86机器中,SQL server实际上只能使用1.6G内存来编译一个查询,存储每和一种可能方案在内存是是不可能的。即便计算机能存储各种替代计划,用户绝不会等待N久来等待系统枚举各种可能的选择。查询优化器使用启发式解决这个问题,并用统计来引导这些启发,这正是本章要阐述的内容。
很多人会认为查询优化器会对每一个给定的查询而选择一个“最佳”的查询计划。可实际上不可能所有的可能计划都被筛选一遍,因此,快速选择一个“足够好的”计划,更贴近于“查询优化”的定义,这才是我们致力追求的目标。
■查询优化器如何浏览查询计划?
查询优化器使用框架(Framework)搜索和有效地比较各种可能的替代计划,这个框架允许SQL Server考虑复杂的,并不容易判断的方式实现给定的查询。持续地跟踪所有可替代计划并有效地找出一个计划并非一件易事,SQL Server的搜索框架包括几个组件,有助于它在有效而可靠地执行任务。
■规则(Rules)
查询优化器是一个搜索框架,从一个给定的查询树,查询优化器考虑将树从当前状态转化为一个不同的的等效状态,而这个状态将被存储在内存中。在SQL Server使用的框架中,这个转化是通过“规则(rule)",这些规则和你在学校里喜欢学习的工科数学定理非常类似。例如"A inner join B"和"B inner join A"结果肯定是一样的,就像数学中的(2+1)和(1+2)的结果相等一样。这些规则被匹配到树模式,如果适于生成新的替代计划,则规则被应用。这些规则组成了查询优化器工作的基础,它们也有助于编码某些必须的启发式(以使其在合理的时间范围内执行搜索)。

查询优化器有各种不同的规则。规则启发性地重写一个查询树为一个新的形态(shape),被称为“替代规则”,考虑工科数学等式的规则被称为“勘探规则(exploration rules)”。这些规则生成一些新的树形态,但并不直接执行。转换逻辑树为将要被执行的物理树的规则衩称为“实现规则(implementation rule)”,这些生成的物理替代计划中的最佳者最终被查询优化器输出作为最终的查询执行计划。

查询优化的更多原文,请查看:http://www.SQLserverInternal.com/companion/

■属性(Properties)

查询框架用一种(针对规则而言)对它更易于工作的格式采集关于查询树的信息,这些信息称为属性(Properties)。它们从子树(sub-tree)中收集信息,这些信息有助于做决定什么样的规则能被在一个更高的点上被处理,例如,一个在SQL Server中使用的属性是一个在数据中(组成惟一键的)列的集合。看下面的一个例子: 

 


邀月工作室

邀月工作室

如果列(col1,col2)组成了 惟一键,那么group by 就没有必要了,看下列语句:


邀月工作室

SQL Server在优化期间采集N多属性。正如其他编译器所做的那样,SQL Server查询优化器采集有关每个查询中引用的列的域限制信息。从预测、连接条件、分区信息中采集信息,检查限制以知道这些预测如何被用于优化查询。关于纯量属性的一个有用的场景是矛盾探测(in contradiction detection)。查询优化器能判定查询是否不会返回任何行。

看下面的例子 ,


邀月工作室
其实,最终的查询计划根本没有引用表,取代原查询的实际上是一个特殊的常量查询,这个常量查询没有访问存储引擎。这是否是一个很聪明的选择呢?

与规则类似,属性也有逻辑属性与物理属性民。逻辑属性包括像输出列的集合,关键列,一个列是否能输出null。这些被应用到所有等价的逻辑或物理计划碎片。当这些勘探规则被评估时,结果查询树共享了同一逻辑属性作为一个被规则使用的原始树。物理属性被定义到一个单个的计划。每一个计划操作器有一整套与之相关的物理属性。一个常用的物理属性是结果是否被排序。这个属性将影响查询优化器是否查找一个索引以交付预期的排序。另一个物理属性是来自查询表的列的集合。这将驾驭一些决定比如在查询中一个次要的索引是否足够充分返回需要的列,以及每个匹配和是否也需要一个基表浏览(look up)等等。

 

下一篇将通过一些实例继续深入了解查询优化器的替代存储、计算序列等。

邀月注:本文版权由邀月和优快云共同所有,转载请注明出处。
助人等于自助!   3w@live.cn

 

7.29华为OD机试真题 新系统 - 能量对撞 (Java/Py/C/C++/Js/Go) 阅读详情

相关推荐

Mendix 开发实践指南|Mendix平台概览

低代码开发是一种将编码从文本形式转变为视觉形式的应用开发方法。它提供了一个模型驱动的、拖放式的界面,而不是传统的编码环境,使得各种技能水平的开发者——包括专业开发人员、新手、主题专家、业务利益相关者和决策者——都能使用低代码工具来构建驱动价值的企业业务应用。低代码的核心在于提高开发的可访问性和效率,让更多人能够参与到应用开发中来​​。Mendix适用于多种应用场景,包括企业级应用、移动应用、物联网(IoT)应用和微服务架构等。

多年搬砖的经验分享... 4413

MySQL必知必会第一章~第八章学习笔记

Chapter1 了解SQL 1.1 数据库基础 学习数据库的良好切入点就是一张最重要的数据库术语清单,并加以说明。 1.1.1 什么是数据库 数据库(database) 保存有组织的数据的容器(通常是一个文件或一组文件) 误用导致混淆 人们通常用数据库这个术语来指代他们使用的数据库软件,这是不正确的。准确的说,数据库软件应称为DBMS(数据库管理系统)。数据库是通过DBMS创建和操纵的容器。所以...

qq_31654575的博客 433

「点燃我,温暖你」用Python制作一个动态爱心效果

最近「点燃我,温暖你」这部剧非常火,讲述的是程序员的爱情故事。其中陈飞宇饰演的男主李峋,在剧中用程序做出的爱心跳动效果,非常炫。

Modeler_xiaoyu的博客 1万+

《Microsoft Sql server 2008 Internals》读书笔记--第八章The Query Optimizer(10)

《Microsoft Sql server 2008 Internal》读书笔记--目录索引今天我们继续学习三个有关计划更新的概念:Halloween Protection、Split/Sort/Collapse和Merge■Halloween Protection(Halloween保护,万圣节面具?呵呵)  Halloween保护描述了关系数据库中用于保证更新计划正确性的一种功能。这个功能的需

邀月周记 3227

【速通版!语义通信基础与前沿学习计划】

🧠语义通信基础与前沿学习计划

dally2的博客 1412

智能硬件产品 App 全球发布 第 1 章:全球 App 发布战略设计

本章阐述智能硬件 App 全球发布战略,涵盖市场分析、竞争格局、用户画像及资源配置。通过制定可执行的全球化推广路径,整合地区法规合规、渠道分发策略与营销活动设计,助力团队快速进入主流商店并确立品牌影响力。同时构建可量化的 KPI 监控体系,指导项目进度追踪与效果复盘,确保产品迭代持续优化,降低运营总成本。

moton2017的博客 155

SQL必知必会(第五版)学习笔记

文章目录第一课 了解SQL1.1数据库基础1.1.1 数据库(database)1.1.2 表(table)1.1.3 列和数据类型1.1.4 行(row)1.1.5 主键(primary key)1.2什么是SQL第二课 检索数据2.1 SELECT语句2.2 检索单个列2.3 检索多个列2.4 检索所有列2.5 检索不同的值2.6 限制结果2.7 注释第三课 排序检索数据3.1 排序数据3.2 按多个列排序3.3 按照相对列位置进行排序3.4 指定排序方向第四课 过滤数据4.1 使用WHERE 子句4.

qq_51468651的博客 5701

今日指数项目之实时流数据采集【六】

实时数据采集代码

Maynor的博客 2145

C#语言和SQL Server第八章笔记

一: 第八章笔记 1-1:SQL:结构化查询语言: 1>DML:数据操作语言:插入 (INSERT...

weixin_33711647的博客 514

CloudCompare 和 PCL:点云网格化分析与处理

点云网格化是将点云数据转化为规则网格的过程,其主要思想是将离散的点云投影到一个平面上,然后对该平面进行划分,形成一系列小区域。在点云网格化方面,PCL 提供了各种算法和工具,可以实现高效的点云网格化操作。以上示例代码中,首先加载了输入的点云数据,然后通过设置合适的网格化算法参数,如搜索半径和最大三角形边长等,执行了网格化操作,最后将网格化结果保存到输出文件中。以上示例代码中,首先加载了输入的点云数据,然后通过设置合适的网格化参数,如分辨率等,执行了网格化操作,最后将网格化结果保存到输出文件中。

TechPulseZ的博客 1289

C# MES通信从入门到精通(10)——C#使用HTTP的Post和Get方法和Mes系统通信

本文详细介绍了如何利用C#完成与HTTP协议的MES系统进行通信,通过POST和GET方法实现与MES系统的交互,由高级工程师的实战经验总结,实属C#与MES通信领域的葵花宝典!

qq_34059233的博客 3410

免费下载:Inside the SQL Server Query Optimizer(查询优化器内幕)

This book will take you from the fundamentals of Statistics, Cost Estimation, Index Selection, and the Execution Engine, and guide you through the inner workings of the Query Optimization proc...

anban6097的博客 205

YOLOv11改进策略【Neck】| 适用关键点检测:PSFM,深层语义融合模块 引入深层与浅层交叉注意力机制,动态建模不同层级的全局语义依赖关系

本文记录的是利用PSFM 模块改进 YOLOv11 的颈部融合部分,专门用于关键点检测。PSFM模块(Profound Semantic Fusion Module,深层语义融合模块) 通过在特征提取网络的深层引入跨模态交叉注意力机制,动态建模红外与可见光特征的全局语义依赖关系。本文将其应用到的颈部部分,融合深层与浅层特征,捕捉长距离语义关联,增强融合特征的判别性与场景理解能力,为检测头提供包含全局上下文的高层语义表示,从而提升模型在复杂场景下的目标检测准确率与语义推理鲁棒性。Rethinking the

Limiiiing的博客 649

《Microsoft Sql server 2008 Internals》读书笔记--第六章Indexes:Internals and Management(1)

《Microsoft Sql server 2008 Internals》索引目录:《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在第五章主要学习了table的内部存储结构,第七章《Special storage》中将继续深入学习存储机制,那将是本书最难理解的一章。第六章主要介绍index的基础知识,第八章是《query Optimizer》,下

邀月周记 2991

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

《Microsoft Sql server 2008 Internals》读书笔记--第八章The Query Optimizer(6)

《Microsoft Sql server 2008 Internals》索引目录:《Microsoft Sql server 2008 Internals》读书笔记--目录索引上篇主要介绍了筛选统计和字符串统计、基线估计,本文将关注Limitation和Costing■限制(limitation) SQL Server的基线估计通常是很棒的。不幸的是,制作一个适合所有应用程序的每一个查询的完美

邀月周记 1749

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

《Microsoft Sql server 2008 Internals》读书笔记--第八章The Query Optimizer(7)

《Microsoft Sql server 2008 Internals》读书笔记订阅地址: http://www.cnblogs.com/downmoon/category/230397.html/rss 《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internal》读书笔记--...

dfdfadsf3443的博客 164

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

《Microsoft Sql server 2008 Internals》读书笔记--第八章The Query Optimizer(8)

《Microsoft Sql server 2008 Internals》索引目录:《Microsoft Sql server 2008 Internals》读书笔记--目录索引 本文继续了解索引视图(Indexes View) 关于索引视图的基本概念,可以在MSDN了解:http://msdn.microsoft.com/zh-cn/library/ms188783.aspx 注意:虽然索引视

邀月周记 2493

《Microsoft Sql server 2008 Internals》读书笔记--第八章The Query Optimizer(9)

《Microsoft Sql server 2008 Internal》读书笔记--目录索引 本文继续关注分区表(Partitioned Tables) 和数据仓库(Data Warehousing) SQL Server 2005针对分区表的并行查询的执行有一个局限性。APPLY操作符的使用在对扫描每个交互的分区时有限制,即允许SQL Server 2005对每个表只允许一个...

dfdfadsf3443的博客 123

《Microsoft Sql server 2008 Internals》读书笔记--第八章The Query Optimizer(3)

《Microsoft Sql server 2008 Internals》索引目录:《Microsoft Sql server 2008 Internals》读书笔记--目录索引上文主要介绍了查询可选计划的存储和操作符如(计算标量、计算序列 等)。现在我们继续来了解优化架构。查询优化器包含了许多执行特定功能的优化的相(phase)。不同的Phase帮助查询优化器在优化进程的最早阶段“最高值”的操

邀月周记 2493

《Microsoft Sql server 2008 Internals》读书笔记--第八章The Query Optimizer(2)

《Microsoft Sql server 2008 Internals》索引目录:《Microsoft Sql server 2008 Internals》读书笔记--目录索引上文主要介绍了查询优化的入门基础和查询优化器如何浏览查询计划中的规则和属性。现在我们继续来了解查询可选计划的存储和操作符如(计算标量、计算序列等)。■可选计划的存储-the "Memo"查询优化器包含一种避免存储重复信息

邀月周记 1995

《Microsoft Sql server 2008 Internals》读书笔记--第八章The Query Optimizer(4)

《Microsoft Sql server 2008 Internals》索引目录:《Microsoft Sql server 2008 Internals》读书笔记--目录索引上篇介绍了架构优化,下来我们一起了解几个非常重要的概念:统计(Statistics)、基线评估(Cardinality estimation)和成本(costing) 查询优化器评估每个操作的成本,决定采用哪个计划。这个

邀月周记 2843
上一篇: 《Microsoft Sql server 2008 Internals》读书笔记--第七章Special Storage(6)
下一篇: 《Microsoft Sql server 2008 Internals》读书笔记--第八章The Query Optimizer(2)
downmoon
博客等级 码龄24年 1676粉丝 494原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值