SQL疑难杂症【5 】大量数据查询的时候要考虑结果为空的情况
最近几天怪事儿出奇的多,同一个工单、同一个产品,在A线可以正常生产,但是在H线死活都无法生产,系统直接提示TimeOut,监控发现有一条SQL语句执行缓慢,Copy出来仔细查看,很简单的一条语句,如下:
SELECT TOP 1 LOT_ID FROM QS_WIP(NOLOCK) WHERE STATION_ID='FB808A1E-5758-43B3-B243-8C728ACC5264'
AND ROUTE_STEP_ID='29F813DC-2204-4413-9FB6-0DBF1982F33F' order by END_TIME desc
看似简单的SQL语句,却执行了10多S还没结果出来,表中STATION_ID与ROUTE_STEP_ID都是有索引的,理论上不应该啊,于是还是等着SQL执行完毕(当时没截图,要1分钟,不敢再次执行了),发现结果是空,如下图所示:
我们再看另一条SQL语句,跟上面的语句唯一不同的就是不同的STATION_ID,如下:
SELECT TOP 1 LOT_ID FROM QS_WIP(NOLOCK) WHERE STATION_ID='40D83B4A-9BC3-4FE0-BE53-65685402AB2E'
AND ROUTE_STEP_ID='29F813DC-2204-4413-9FB6-0DBF1982F33F' order by END_TIME desc
这条语句执行速度很快,如下:
结果返回了实际的数据,难道是数据为空的原因吗?那好,我手动增加一条符合条件的H线数据,增加数据之后,再次执行第一条SQL,如下:
结果显示,1s的时间就出来,看来真是这个问题导致。
分析一下结果:
有一个比较重要的因素,那就是目标表中的数据量比较大,有100000000+的记录,虽然在查询的时候加上了TOP 1,但是在没有符合条件的数据的情况下,将对整个表进行全表扫描,也就是对100000000+的记录进行扫描,那一定会很慢,即便加了索引也一样,因为找不到符合条件的数据,那就一直找,直到找到数据为止;
相反,只要有一条符合条件的数据,那么TOP 1的时候找到了这一条符合条件的记录,将不再继续扫描表中其它的数据,所以速度快。
SQL疑难杂症【5 】大量数据查询的时候要考虑结果为空的情况的更多相关文章
- Mybatis中sql语句中的in查询,判断null和size为0的情况
不严谨的写法,可能会报错:in (),这种情况不符合SQL的语法,导致程序报错. 如果简单只做非空判断,这样也有可能会有问题:本来in一个空列表,应该是没有数据才对,却变成了获取全部数据! 所以一个比 ...
- hibernate框架学习第五天:数据查询、投影等
复习day1环境搭建CRUD操作DB6个核心的APIday2TO PO DO 及其状态切换OID 自然主键 代理主键(uuid)一级缓存 Session绑定 load/get关系1对1 1对多(重点) ...
- 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟表
前言 接上一篇关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询,主要是关系型数据库基本数据查询.包括子查询.分组查询.聚合函数查询.模糊查询,本文是介绍一下关系型数据库几种高级数据查询SQL ...
- 6、SQL Server 数据查询
一.使用SELECT检索数据 数据查询是SQL语言的中心内容,SELECT 语句的作用是让数据库服务器根据客户要求检索出所需要的信息资料,并按照规定的格式进行整理,返回给客户端. SELECT 语句的 ...
- SQL Server 数据查询 整理
一.使用SELECT检索数据 数据查询是SQL语言的中心内容,SELECT 语句的作用是让数据库服务器根据客户要求检索出所需要的信息资料,并按照规定的格式进行整理,返回给客户端. SELECT 语句的 ...
- SQL SERVER之数据查询
本篇主要解说查询语句,全部的演示样例都会依照以下这张表进行. stuID stuName age sex 11090241031 王小虎 21 男 11090241032 王小六 22 男 11 ...
- 关系数据标准语言SQL之数据查询
数据查询是数据库的核心操作.SQL提供了SELECT语句进行数据查询,该语句具有灵活的使用方式和丰富的功能. 其一般格式为 select [all | distinct]<目标表达式>[, ...
- 学习如何看懂SQL Server执行计划(一)——数据查询篇
一.数据查询部分 1. 看到执行计划有两种方式,对sql语句按Ctrl+L,或按Ctrl+M打开显示执行计划窗口每次执行sql都会显示出相应的执行计划 2. 执行计划的图表是从右向左看的 3. SQL ...
- SQL命令语句进行大数据查询如何进行优化
SQL 大数据查询如何进行优化? 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索 2.应尽量避免在 where 子句中对字段进行 null 值 ...
随机推荐
- Rearrange a string so that all same characters become d distance away
Given a string and a positive integer d. Some characters may be repeated in the given string. Rearra ...
- markdown 设置字体颜色
<font color=red>内容</font> markdown.
- XE5 ImageList的BUG?
今天做界面, 在imagelist里加载一个带有半透明通道的PNG图, 结果发现图片居然发暗, 如下: 原图: IDE里加载以后的图: 明显变暗...查询了源码, 无果 然后又用2010去测试, 发现 ...
- 《linux内核设计与实现》读书笔记第十八章
第18章 调试 18.1 准备开始 准备工作需要的是: 一个bug 一个藏匿bug的内核版本 相关内核代码的知识和运气 18.2 内核中的bug 内核中bug的产生原因 从明白无误的错误代码——没有把 ...
- ios 父VIew的宽度 等于较大view的宽度,并且垂直居中
白色view上面有两个子View,红色view和橙色view.白色view的宽度等于橙色view和红色view宽度较大的一个,并且橙色view和红色view垂直居中, Masonry布局如下: ...
- nginx限制访问速度
转自:http://siwei.me/blog/posts/nginx-ip 参考:http://tengine.taobao.org/document_cn/http_limit_req_cn.ht ...
- Spring task executor同异步
1. spring提供了哪些任务执行器,是否有同步的任务执行器 有ThreadPoolTaskExecutor等执行器 同步可以用SyncTaskExecutor,但这个可以说不算一个线程池,因为还在 ...
- ORA-25153: Temporary Tablespace is Empty
在一测试环境做测试的时候发生以下错误: SQL> exec dbms_stats.gather_table_stats(ownname=>'SYS',tabname=>'TT',me ...
- svg学习(二)
svg嵌入html有以下3种方式: OBJECT < object data = " rect.svg " width = " 300 " heigh ...
- SQL注入POC
mysql #encoding=utf-8 import httplib import time import string import sys import random import urlli ...