SQL Server2005 探索之--正确使用索引--SQL案例

应上篇文章"SQL Server2005探索之--正确使用索引--序"朋友们的需要,将如何正确使用索引结合几个SQL索引使用说明作为补充。

  数据库: Northwind

  SQL Server 版本: SQL Server2005

  操作之前执行如下sql:dbcc freeproccache    以清空缓存,执行“SET STATISTICS IO ON ”,查看执行成本。
                                dbcc dropcleanbuffers

  1. 不要对数据进行计算



Code

Code


执行成本:

表 'Orders'。扫描计数 1,逻辑读取 12 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

执行计划:

 附件: 您所在的用户组无法下载或查看附件
 

执行分析:在上述SQL中WHERE条件中以CustomerID作为条件进行约束,正用到了Orders表中索引CustomerID,索引CustomerID以数据列CustomerID进行排序,SQL查询中利用了索引CustomerID配合二分法查找,很快检索了数据。



SQL

Code


执行成本:

表 'Orders'。扫描计数 1,逻辑读取 22 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

执行计划:

 附件: 您所在的用户组无法下载或查看附件


执行分析:

这上述SQL对CustomerID列进行计算,查询计划只好使用聚集索引扫描检索数据。

执行比较:

  合理使用索引:I/O costs:0.003125, CPU costs:0.0001625

  未合理使用索引:I/O costs: 0.0171991, CPU costs: 0.00107

2. WHERE条件对字段使用函数



Code

Code


执行成本:

表 'Orders'。扫描计数 1,逻辑读取 12 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

执行计划:

 附件: 您所在的用户组无法下载或查看附件




对数据使用函数:

Code

Code


执行成本:

表 'Orders'。扫描计数 1,逻辑读取 15 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

执行计划:

 附件: 您所在的用户组无法下载或查看附件


执行比较:

    合理使用索引:I/O costs:0.003125, CPU costs:0.0001625

  未合理使用索引:I/O costs: 0.0046065, CPU costs: 0.00107

3. 使用OR

Code

Code


执行成本:

表 'Orders'。扫描计数 1,逻辑读取 22 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

执行计划:

 附件: 您所在的用户组无法下载或查看附件


将OR改为UNION



Code

Code


执行成本:

表 'Orders'。扫描计数 1,逻辑读取 15 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

执行计划:

 附件: 您所在的用户组无法下载或查看附件


执行比较:

使用OR: I/O costs:0.0171991 CPU:0.00107

不使用OR:I/O costs:0.003125 CPU:0.0001625



总结: 通过上述SQL不同语法比较,可以看出合理使用SARG参数可以较好的利用索引,降低执行成本,提高效率。


(文/tianqing  出处/博客园)

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [SQL Server] 的这些文章也感兴趣:

检测和解决 SQL Server 2000 SP 4 中的延迟和阻塞 I/O 问题
几条相对于SQL Server密码的潜威胁判断
SQL Server补丁版本的检查和安装过程中常见问题
Sql Server全文搜索中文出错的问题
使用HTTP访问SQLServer
使用SQL2000将现有代码作为Web服务提供
SQL Server 死锁处理和优化心得
Sql数据库MDF数据文件数据库恢复
用SQL Server保持会话状态
在SQL2000查询中使用XDR的例子