热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQL2005数据库引擎结构(二)

SQL2005数据库引擎结构(二)-----------------------------------------------------------

SQL2005数据库引擎结构(二)

 

------------------------------------------------------------------------

-- Author : HappyFlyStone

-- Date   : 2009-09-21 17:36:30

-- Version: Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86)

--      Apr 14 2006 01:12:25

--           Copyright (c) 1988-2005 Microsoft Corporation

--           Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

--      转载请注明出处,更多请关注:http://blog.csdn.net/happyflystone

------------------------------------------------------------------------

 


一、关系引擎 relational engine


这个可以说是数据库最重要的引擎之一,有的书也称查询处理器,简单的说它完成对某个查询进行分析并协调引擎内的相关组件以最优的方式进行工作,最终以OLE DB行集或非OLE DB行集与存储引擎(storage engine)通讯进行存取数据。

在关系引擎内按其功能大体上可以分几个主要的组件,重点说说命令解析及查询优化器的工作。下面我们以图来说明:

注:图中的蓝色箭头是我根据自己的理解画出来的,事实这些组件之间的工作是互相牵连、错综复杂的,如有不当希望指正

命令解析器:很显然它是负责检查T-SQL的语法正确性并转译成内部使用的查询树,在这时如果解析器无法识别时会立马报错并指出错误出处。我平时在使用的过程中经常会发现SQL抛出没有准确标识的错误,这是因为T-SQL本身没有语法错误,命令解析器把它生成查询树,不再保存源码格式的语句,在后续的执行中如果有错误发生自然无法定位源码行信息。
    查询优化器:这个话题感兴趣的人就多了,但是我得告诉大家的是SQL采用的取样分布统计数据评估成本的方式进行优化的,这势必会带来一些让人不尽如意的时候。优化器所能做的是使用各种存取方法及策略解析查询并生成相对成本最经济的计划。这个最经济的计划就有意思了,SQLSERVER并没有采用彻底优化的方式,因为对于一个复杂的查询如果优化器检查并评估每一个可能的计划比选择一个相对经济的计划并执行它耗时耗成本。最后SQL优化器采用了启发式的修剪方式回避彻底优化生成执行计划,其实我们想呀,基于成本的优化本身这个过程就是耗时,如果优化都彻底实现最优化,对于一个查询无论你如何实现它在性能上没有了差异,嘿嘿,DBA失业也就不远了。

查询优化器首先从解析器获取到查询树,首先判断是否要优化,如果不需要优化的查询树直接生成内格式,比如控制流、DLL命令等。另外的被标识并进入实际执行优化阶段,这部分被标识的语句大部分为DML语句。优化过程大体如下:

 

 

Pseudo系统过程:SQL6.5以后的版本在关系引擎中加入了系统过程的二进代码,如游标运行机制的过程:sp_cursor、sp_cursoropen等以交互的方式解决难以标准的SQL语句,调用方式类似于存储过程。


推荐阅读
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了将mysql从5.6.15升级到5.7.15的详细步骤,包括关闭访问、备份旧库、备份权限、配置文件备份、关闭旧数据库、安装二进制、替换配置文件以及启动新数据库等操作。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • 如何利用 Myflash 解析 binlog ?
    本文主要介绍了对Myflash的测试,从准备测试环境到利用Myflash解析binl ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
author-avatar
星晴SOS
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有