今天在帮客户做语句优化的时候,突然遇到这样一个语句,类似下面的例子(原语句是个update)

  例子中使用AdventureWorks数据中的两个表。

  productID 是[Production].[Product] 表的主键,在[Purchasing].[PurchaseOrderDetail] 中也建立了非聚集索引

select name,(select count(*) from [Purchasing].[PurchaseOrderDetail] where ProductID = ProductID)
from [Production].[Product]
where ProductID = 341

  

-----------------------------------此处请在心中默念 执行语句的意思,会选择什么样的索引?-----------------------------------------

    

    首先来看一下 执行计划

    

    [Purchasing].[PurchaseOrderDetail]  为什么走索引扫描? 这明显应该索引查找啊!

    仔细看一下索引扫描的谓词

    

    我靠自己和自己匹配去了  ? 和你想的一样么?

    修改下代码~看看问题的所在

    

select name,(select count(*) from [Purchasing].[PurchaseOrderDetail] 

where ProductID =[Production].[Product].ProductID) 
from [Production].[Product] where ProductID = 341

    

    

    这是一个由于粗心而犯下的错误,例子中是一个查询,实际中却是一个update 影响可想而知,而这个影响在存储过程中久久没能发现,要不是优化查看了执行计划关系开销,我扫一眼代码也想当然的觉得完全没问题!

    问题得到解决,即解决的语句运行速度慢的问题,又找出了程序的BUG。

    总结: 细心很重要!

细心很重要---猜猜这个SQL执行的什么意思的更多相关文章

  1. SQL执行效率2-执行计划

    以下语句可以进行SQL 语句执行时间分析,两个Go之间就是SQL查询语句 use Work--数据库名 go set statistics profile on set statistics io o ...

  2. sql执行

    一.提高sql执行效率---in与exist . where column in (select * from table where ...) . ...where exists (select ' ...

  3. Atitit sql执行计划

    Atitit sql执行计划 1.1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的 Oracle中的执行计划 ...

  4. SQL 执行计划(一)

    缓存执行计划  SQL Server 2008提供了一些服务器对象来分析执行计划Sys.dm_exec_cached_plans:    包含缓存的执行计划,每个执行计划对应一行.Sys.dm_exe ...

  5. 用scala实现一个sql执行引擎-(上)

    前言 在实时计算中,通常是从队列中收集原始数据,这种原始数据在内存中通常是一个java bean,把数据收集过来以后,通常会把数据落地到数据库,供后面的ETL使用.举个一个简单的例子,对一个游戏来说, ...

  6. 查看用户的SQL执行历史

    程序开发少不来SQL,基本都是基于SQL开发,程序仅仅起一个流程控制的作用.但是数据库本身存在许多内置的视图或者内置的表,如果打算研究SQL执行的效率已经SQL执行的历史记录,通过这些视图可以知道. ...

  7. in和exists的区别与SQL执行效率

    in和exists的区别与SQL执行效率最近很多论坛又开始讨论in和exists的区别与SQL执行效率的问题,本文特整理一些in和exists的区别与SQL执行效率分析 SQL中in可以分为三类: 1 ...

  8. in和exists的区别与SQL执行效率分析

    可总结为:当子查询表比主查询表大时,用Exists:当子查询表比主查询表小时,用in SQL中in可以分为三类: 1.形如select * from t1 where f1 in ('a','b'), ...

  9. sql执行计划解析案例(二)

    sql执行计划解析案例(二)   今天是2013-10-09,本来以前自己在专注oracle sga中buffer cache 以及shared pool知识点的研究.但是在研究cache buffe ...

随机推荐

  1. PHP获取页面执行时间的方法

    一些循环代码,有时候要知道页面执行的时间,可以添加以下几行代码到页面头部和尾部: 头部: <?php $stime=microtime(true); 尾部: $etime=microtime(t ...

  2. 设计模式:Context模式

    作者:吴香伟 发表于 2014/09/12 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 Ceph实现中使用了大量派生于Context抽象类的子类,用法简单却很 ...

  3. Markdown 基本入门使用

    http://www.appinn.com/markdown/ markdown快速入门Markdown 常用语法: # 标题 强调:用星号(*)和底线(_)作为标记强调字词的符号,如果你的 * 和 ...

  4. 一起买beta版PHP单元测试

    一起买beta版PHP单元测试 测试目的 保证代码质量,对各个单元进行测试,可以有效地保证代码的可靠性,让模块在与别的模块整合时出现更少的错误. 单元描述 完成帖子接口 ​ 将"正在进行&q ...

  5. iOS多线程 NSOperation的用法

    上一篇写了 GCD 的使用,接下来就了解一下 NSOperation ,NSOperation是苹果对 GCD 的 OC 版的一个封装,但是相对于GCD来说可控性更强,并且可以加入操作依赖. NSOp ...

  6. html5 canvas用动画的形式装载图像

    本示例使用HTML5 canvas,简单的编写了装载图片效果, 请使用支持HTML5的浏览器预览效果: 下图为以逐渐横向栅格的效果图 html部分: <!DOCTYPE html> < ...

  7. Qt ffmpeg环境搭建

    ffmpeg下载地址:https://ffmpeg.zeranoe.com/builds/ 版本选择第一个,然后多少位看自己的pc(我的是64),右边对应三个都要下载,Static,Shared,De ...

  8. linux指令记录

    sudo mount /dev/sda3 data 挂载硬盘到当前目录下的data文件夹

  9. Redis多机常用架构-cluster

    Redis-cluster:去中心化,中间件,集群中任意节点平等,任一节点可获得全局的数据 Redis-cluster 拓扑图: 架构演变及 cap 理论: 单机 Redis 属于 cp 模型. Re ...

  10. Windows 8.1 应用开发文章汇总

    Windows 8.1 应用再出发 - C# + XAML  1. Windows 8.1 应用再出发 - 创建我的第一个应用 2. Windows 8.1 应用再出发 - 几种常用控件 3. Win ...