细心很重要---猜猜这个SQL执行的什么意思
今天在帮客户做语句优化的时候,突然遇到这样一个语句,类似下面的例子(原语句是个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执行的什么意思的更多相关文章
- SQL执行效率2-执行计划
以下语句可以进行SQL 语句执行时间分析,两个Go之间就是SQL查询语句 use Work--数据库名 go set statistics profile on set statistics io o ...
- sql执行
一.提高sql执行效率---in与exist . where column in (select * from table where ...) . ...where exists (select ' ...
- Atitit sql执行计划
Atitit sql执行计划 1.1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的 Oracle中的执行计划 ...
- SQL 执行计划(一)
缓存执行计划 SQL Server 2008提供了一些服务器对象来分析执行计划Sys.dm_exec_cached_plans: 包含缓存的执行计划,每个执行计划对应一行.Sys.dm_exe ...
- 用scala实现一个sql执行引擎-(上)
前言 在实时计算中,通常是从队列中收集原始数据,这种原始数据在内存中通常是一个java bean,把数据收集过来以后,通常会把数据落地到数据库,供后面的ETL使用.举个一个简单的例子,对一个游戏来说, ...
- 查看用户的SQL执行历史
程序开发少不来SQL,基本都是基于SQL开发,程序仅仅起一个流程控制的作用.但是数据库本身存在许多内置的视图或者内置的表,如果打算研究SQL执行的效率已经SQL执行的历史记录,通过这些视图可以知道. ...
- in和exists的区别与SQL执行效率
in和exists的区别与SQL执行效率最近很多论坛又开始讨论in和exists的区别与SQL执行效率的问题,本文特整理一些in和exists的区别与SQL执行效率分析 SQL中in可以分为三类: 1 ...
- in和exists的区别与SQL执行效率分析
可总结为:当子查询表比主查询表大时,用Exists:当子查询表比主查询表小时,用in SQL中in可以分为三类: 1.形如select * from t1 where f1 in ('a','b'), ...
- sql执行计划解析案例(二)
sql执行计划解析案例(二) 今天是2013-10-09,本来以前自己在专注oracle sga中buffer cache 以及shared pool知识点的研究.但是在研究cache buffe ...
随机推荐
- [Arduino] Arduino猪头笔记
1. 步进电机驱动 今天才发现....原来在不同的步进电机驱动模块里面,循环时钟是不一样的.... 步进电机驱动模块以及电路配置: 驱动代码的主要部分: int sp_param = 16383; d ...
- 浅析MVC模式与三层架构的区别01
三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层)三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI ...
- ReferenceQueue<T>随笔
参考资料: ReferenceQueue食用手册 java引用食用手册 ReferenceQueue源代码里面很好的展示了java队列的实现思路, 以及多线程观察者的实现思路 多线程观察者实现思路: ...
- Powerdesigner 设置唯一约束
- UITableViewCell的highlighted 和selected 属性1
将UITableViewCell的selectedBackgroundView设置为按下图片的状态,同时不支持多选的情况下,遇到如下问题: 如果默认第一个cell处于selected状态,然后再点击其 ...
- java开发常用工具
1.eclipse3.6 +浏览器插件+findbug+checkstyle+pmd+svn 2.plsql8.0对数据库的操作,存储过程的调试 3.Securecrt对linux服务器的操作 4.e ...
- DIV弹出和关闭新DIV
代码用HTML+JS实现: 代码(用HTML+JS实现): <!doctype html> <html lang="UTF-8"> <head> ...
- jquery选择器使用说明
在jquery中选择器是一个非常重要的东西,几乎做什么都离不开它,下面我总结了jquery几种选择器的用法.以方便后面直接可以用到!! 层次选择器: 1.find()://找到该元素的子元素以及孙子元 ...
- navicat自动备份数据
1.打开navicat客户端,连上mysql后,双击左边你想要备份的数据库.点击"计划",再点击"新建批处理作业". 2.双击上面的可用任务,它就会到下面的列表 ...
- sharepoint 网站创建
打开开始菜单,右键sharepoint管理中心以管理员身份打开 打开管理web应用程序菜单,并新建web应用程序 新建web应用程序配置,大多数采用默认配置. 建议自定义端口号,URL的端口号和设置的 ...