看懂sqlserver查询计划

看懂sqlserver查询计划

ID:29464677

大小:96.04 KB

页数:18页

时间:2018-12-20

看懂sqlserver查询计划_第1页
看懂sqlserver查询计划_第2页
看懂sqlserver查询计划_第3页
看懂sqlserver查询计划_第4页
看懂sqlserver查询计划_第5页
资源描述:

《看懂sqlserver查询计划》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、看懂SqlServer查询计划对于SqlServer的优化来说,可能优化查询是很常见的事情。关于数据库的优化,本身也是一个涉及面比较的广的话题,本文只谈优化查询时如何看懂SqlServer查询计划。由于本人对SqlServer的认识有限,如有错误,也恳请您在发现后及时批评指正。首先,打开【SQLServerManagementStudio】,输入一个查询语句看看SqlServer是如何显示查询计划的吧。说明:本文所演示的数据库,是本人写的一个演示程序专用的数据库,可以在此网页中下载。selectv.OrderID,v

2、.CustomerID,v.CustomerName,v.OrderDate,v.SumMoney,v.FinishedfromOrdersViewasvwherev.OrderDate='2010-12-1'andv.OrderDate'2011-12-1';其中,OrdersView是一个视图,其定义如下:SELECTdbo.Orders.OrderID,dbo.Orders.CustomerID,dbo.Orders.OrderDate,dbo.Orders.SumMoney,dbo.Orders.Finish

3、ed,ISNULL(dbo.Customers.CustomerName,N'')ASCustomerNameFROMdbo.OrdersLEFTOUTERJOINdbo.CustomersONdbo.Orders.CustomerID=dbo.Customers.CustomerID对于前一句查询,SqlServer给出的查询计划如下(点击工具栏上的【显示估计的执行计划】按钮):从这个图,我们至少可以得到3个有用的信息:1.哪些执行步骤花费的成本比较高。显然,最右边的二个步骤的成本是比较高的。2.哪些执行步骤产生的

4、数据量比较多。对于每个步骤所产生的数据量,SqlServer的执行计划是用【线条粗细】来表示的,因此也很容易地从分辨出来。3.每一步执行了什么样的动作。对于一个比较慢的查询来说,我们通常首先要知道哪些步骤的成本比较高,进而,可以尝试一些改进的方法。一般来说,如果您不能通过:提高硬件性能或者调整OS,SqlServer的设置之类的方式来解决问题,那么剩下的可选方法通常也只有以下这些了:1.为【scan】这类操作增加相应字段的索引。2.有时重建索引或许也是有效的,具体情形请参考后文。3.调整语句结构,引导SqlServe

5、r采用其它的查询方案去执行。4.调整表结构(分表或者分区)。下面再来说说一些很重要的理论知识,这些内容对于执行计划的理解是很有帮助的。SqlServer查找记录的方法说到这里,不得不说SqlServer的索引了。SqlServer有二种索引:聚集索引和非聚集索引。二者的差别在于:【聚集索引】直接决定了记录的存放位置,或者说:根据聚集索引可以直接获取到记录。【非聚集索引】保存了二个信息:1.相应索引字段的值,2.记录对应聚集索引的位置(如果表没有聚集索引则保存记录指针)。因此,如果能通过【聚集索引】来查找记录,显然也是

6、最快的。SqlServer会有以下方法来查找您需要的数据记录:1.【TableScan】:遍历整个表,查找所匹配的记录行。这个操作将会一行一行的检查,当然,效率也是最差的。2.【IndexScan】:根据索引,从表中过滤出来一部分记录,再查找所匹配的记录行,显示比第一种方式的查找范围要小,因此比【TableScan】要快。3.【IndexSeek】:根据索引,定位(获取)记录的存放位置,然后取得记录,因此,比起前二种方式会更快。4.【ClusteredIndexScan】:和【TableScan】一样。注意:不要以为

7、这里有个Index,就认为不一样了。其实它的意思是说:按聚集索引来逐行扫描每一行记录,因为记录就是按聚集索引来顺序存放的。而【TableScan】只是说:要扫描的表没有聚集索引而已,因此这二个操作本质上也是一样的。5.【ClusteredIndexSeek】:直接根据聚集索引获取记录,最快!所以,当发现某个查询比较慢时,可以首先检查哪些操作的成本比较高,再看看那些操作是查找记录时,是不是【TableScan】或者【ClusteredIndexScan】,如果确实和这二种操作类型有关,则要考虑增加索引来解决了。不过,增

8、加索引后,也会影响数据表的修改动作,因为修改数据表时,要更新相应字段的索引。所以索引过多,也会影响性能。还有一种情况是不适合增加索引的:某个字段用0或1表示的状态。例如可能有绝大多数是1,那么此时加索引根本就没有意义。这时只能考虑为0或者1这二种情况分开来保存了,分表或者分区都是不错的选择。如果不能通过增加索引和调整表来解决,那么可以试试调整语

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。