擦亮自己的眼睛去看SQL Server之简单Select

发表于:2011-7-04 10:03

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:小军人    来源:51Testing软件测试网采编

#
server
#
SQL
分享:

  这篇文章主要和大家讨论几乎所有人都熟悉,但不少人又陌生的一条select语句。不知道大家有没有想过到底是什么东西让SQLServer能理解我们写的select。这中间到底发生了什么,是不是有过冲动想去了解。至少我曾经冲动想去了解,但当时主要在研究CLR以及webform相关知识。后来主要精力放在研究SQLserver内部机制,今天就给大家介绍下这条语句。

  一、范例数据库脚本

  1. create database Test  
  2. go  
  3. alter database Test set recovery simple  
  4. go  
  5. use Test  
  6. go  
  7. create table Test  
  8. (  
  9. ID int identity(1,1) primary key,  
  10. [Namevarchar(64) not null default '',  
  11. CreatedTime datetime not null default getdate()  
  12. )  
  13. insert into Test([name]) values('xiaojun')

  这个脚本就不介绍了,很简单。

  二、语句分析

select * from Test

  简单吧,本来嘛标题就是之简单语句。下面开始分析这条语句吧,假设读者已经知道了SQLServer整体架构或者已经阅读过这个系列第一篇文章。当这条语句被可靠的传递到关系引擎中的命令分析器,接下来就发生了:

  分析:

  从语法库中检查T-SQL进行基本的语法检查。如果语法出错了,那整个语句就立即停止,提示用户语法出错,哪出错。比如错误使用的关键字、列、表名等。如果语法没有出错,就会生成一个分析树传递给下一个步骤。

  绑定:

  1、名字解析:检查所有的对象在用户的安全上下文中存在并可见。这个步骤很好理解主要是数据库每个对象都有权限。如果登录的账号没有相应权限,就结束这个步骤。

  2、类型推导:确定解析树中每个节点的最终类型。这个步骤主要是补充分析分析步骤中的分析树,确定其最终的类型。不知道大家可想过为什么要到这一步才确定。为什么不在分析中确定呢?主要原因是效率,类型推导会消耗资源,没有必要在没有确定用户对每个对象有权限的情况下确定。那为什么不直接先确定用户对每个对象有权限再做分析呢。那是因为没做分析的时候,系统无法知道具体有哪些对象。我又要说了,SQLServer的设计真的可以说是很精致的,连这样的细节和资源消耗都考虑了。值得我们学习哦。

  3、聚合绑定:确定哪些地方可以进行聚合。这个步骤主要和SQL中是否有聚合操作有关系。

  4、组合绑定:将聚合绑定到正确的选择列表中。这个步骤是把聚合操作与需要聚合的列绑定对应起来。

  这两步操作主要是由命令分析器完成,它最终得到分析树,传递给SQLServer引擎中最复杂最优技术含量的组件,没有之一,查询优化器。查询优化器功能概况起来很简单,就是优化SQL。具体优化模型如下:

31/3123>
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • ferrylu2011
    2011-7-31 09:40:36

    项目背景:项目是商业智能分析系统,期间会有数据挖掘方面工具的使用,更多的是完成对数据库的使用
    如果您熟悉oracle和sqlserver数据库,对SQL语句熟练掌握,愿意从事数据库测试工作可以联系我
    项目团队:20人左右的团队规模
    基本要求:熟练掌握测试流程和方法:包括用例编写执行。有数据库测试类型的项目经验,优先。熟练SQL语句
    工作地点:北京上地软件园(西二旗城铁对面)
    有考虑这么方面工作的朋友,可以加我qq具体咨询下,希望有合作机会:1483620344
    有正在求职的朋友,也可以推荐,推荐有奖金。
    符合以下三点,和职位比较匹配:
    1.做过数据库项目的测试,熟练SQL语句
    2.有过一定的数据库开发经验,愿意从事数据库测试工作
    3.有过Java 或者ASP.NET 结合数据库的开发工作,愿意转到数据库工作的方向,
    可以加我qq:1483620344  谢谢

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号