这些Transact-SQL语句都可以在查询处理器中交互式执行。在这个查询处理器中,使用了彩色代码元素编辑器。这样,在该处理器中写查询语句时,SQL Server系统自动将该查询语句中的关键字等SQL语言元素使用不同的颜色标示出来,可以醒目地检查这些语句的语法是否正确。另外,这种着重显示的颜色,用户也可以根据自己的需要进行定制。
对于查询语句的结果集,可以选择不同的显示方式。既可以使用象以前版本中的那种表格形式显示结果集,也可以选择使用网格形式来显示结果集。如果使用网格形式来显示结果集,那么用户完全可以象使用表一样操纵这些结果集中的内容。这些查询语句和结果集可以根据需要,存储在脚本文件中。
查询处理器提供了多个查询窗口。这些同时打开的查询窗口,都是分别表示一个线程,即分别对应一个用户连接。因此,在这些查询窗口中,窗口都是互相独立的,窗口中的内容都是独立执行的。另外,当打开多个查询窗口时,由于每一个查询窗口对应一个用户连接,并且每一个用户连接都要占用一定数量的系统资源,因此,打开的查询窗口愈多,占用的系统资源也愈多。
可以在查询处理器中执行脚本文件中的内容。脚本文件是存放许多Transact-SQL语句的操作系统文件。在查询处理器中,既可以执行该脚本文件中的全部Transact-SQL语句内容,也可以根据需要选择一部分Transact-SQL语句来执行。
在这个查询处理器中,支持新的查询规划算法,改进了的成本模型和规划选择模型,可以大大加快对庞大数据库查询进程的速度。还支持新的散列连接连接和和合并连接算法,可以使用多索引操作,也可以提高查询性能。
4、执行规划
执行规划的概念
可以使用查询处理器来为将要执行的查询语句构造一个执行规划。执行规划就是一系列的产生查询语句所要求结果的步骤。现在举一个例子说明什么是执行规划。例如:
|
在上面这个查询语句中,表示从表customer中检索出全部的内容,并且根据列custid进行排序。一般情况下,该查询语句可能会产生下面的执行规划步骤:
第一步,扫描表customer主键的聚簇索引;
第二步,根据列custid,对在第一步中得到的查询结果进行排序;
第三步,把在第二步中得到的结果返回给应用程序。
查询处理器使用存储在数据库表中的有关统计信息来确定选用的产生最终结果的最有效的方法,这种方法该查询语句的执行规划。
如何访问数据库中的数据
为了能更好地理解查询语句的执行规划,看一看查询语句是如何访问数据库中的数据的。一般地,系统访问数据库中的数据,可以使用两种方法。第一种方法是表扫描,就是指系统将指针放置在该表的表头数据所在的数据页上,然后按照数据页的排列顺序,一页一页地从前向后扫描该表数据所占有的全部数据页,直至扫描完表中的全部记录。在扫描时,如果找到符合查询条件的记录,那么就将这条记录挑选出来。最后,将全部挑选出来符合查询语句条件的记录显示出来。第二种方法是使用索引查找。索引是一种树状结构,其中存储了关键字和指向包含关键字所在记录的数据页的指针。当使用索引查找时,系统沿着索引的树状结构,根据索引中关键字和指针,找到符合查询条件的的记录。最后,将全部查找到的符合查询语句条件的记录显示出来。
在SQL Server中,当访问数据库中的数据时,由SQL Server确定该表中是否有索引存在。如果没有索引,那么SQL Server使用表扫描的方法访问数据库中的数据。那么,查询处理器根据分布的统计信息生成该查询语句的优化执行规划,以提高访问数据的效率为目标,确定是使用表扫描还是使用索引。
统计信息
系统为每一个索引创建一个分布页,统计信息就是指存储在分布页上的某一个表中的一个或者多个索引的关键值的分布信息。当执行查询语句时,为了提高查询速度和性能,系统可以使用这些分布信息来确定使用表的哪一个索引。查询处理器就是依赖于这些分布的统计信息,来生成查询语句的执行规划。执行规划的优化程度依赖于这些分布统计信息的准确步骤的高低程度。如果这些分布的统计信息与索引的物理信息非常一致,那么查询处理器可以生成优化程度很高的执行规划。相反,如果这些统计信息与索引的实际存储的信息相差比较大,那么查询处理器生成的执行规划的优化程度则比较低。
一般地,分布的统计信息与索引的实际存储的信息是比较一致的。但是,当对某一个表有大量的数据操作时,特别是在被索引的列上有大量的数据被增加、修改或者删除,那么索引的实际存储信息就发生了比较大的变化。这时,索引中关键字的分布统计信息就与实际情况有大的差别。因此,为了提高关键字的分布统计信息的准确程度,当表中的数据有比较大的操作变化时,应该针对表中的全部索引或者一个索引执行UPDATE STATISTICS语句,这样系统重新计算关键字的分布统计信息,提高执行规划的优化程度和访问数据的效率。