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的时候找到了这一条符合条件的记录,将不再继续扫描表中其它的数据,所以速度快。

 

时间: 2024-10-12 21:12:45

SQL疑难杂症【5 】大量数据查询的时候要考虑结果为空的情况的相关文章

MS SQL基础教程:数据查询-SELECT语句

数据库是为更方便有效地管理信息而存在的人们,希望数据库可以随时提供所需要的数据信息.因此,对用户来说,数据查询是数据 库最重要的功能.本章将讲述数据查询的实现方法. 在数据库中,数据查询是通过SELECT 语句来完成的.SELECT 语句可以从数据库中按用户要求检索数据,并将查询结果以表格的形式返回.我们在"Transact-SQL 语言"章节及前面的章节中已经初步接触到了SELECT 语句的一些用法,在本章中将分类讲述其具体用法. 本节讲述SELECT 语句完整的语法结构,这是一个非

SQL Server 中时间数据查询需要注意的一个小问题

server|数据|问题 由于本人的工作环境,接触到基于不同语言下的SQL Server,遇到不少麻烦,其中DateTime数据类最多,中文,韩文等数据库中时间的默认格式为:MM/DD/YY 或 YY/MM/DD但英文中又分为:MM/DD/YY 或 DD/MM/YY 这样问题就来啦例如: 我的一个韩国客户,操作系统:windows 2000 server 英文版,MS SQL Server 韩文版他的主机在新西兰,时间系统默认为新西兰 DD/MM/YY数据库时间默认为:  MM/DD/YY当数据

跟我学SQL:(一)数据查询

数据  且不说你是否正在从事编程方面的工作或者不打算学习SQL,可事实上几乎每一位开发者最终都会遭遇它.你多半还用不着负责创建和维持某个数据库,但你怎么着也该知道以下的一些有关的SQL知识.     我为那些感兴趣的开发者或者能从数据库操作中得益的读者撰写了这篇关于基本SQL语法的概述性文章.本文主要讨论基本的数据操作查询,后续的文章还会继续讨论如何修改数据库自身以及更高级的查询概念. SQL数据库是怎么回事?  SQL(结构化查询语言)就是负责与ANSI维护的数据库交互的标准.最新的版本是SQ

SQL数据查询语句

查询是SQL语言的核心,SQL语言只提供唯一一个用于数据库查询的语句,即SELECT语句.用于表达SQL查询的SELECT语句是功能最强也是最复杂的SQL语句,它提供了很多选项和使用方法.SELECT语句的命令格式如下: SELECT查询语句是由七个子句构成,其中SELECT和FROM子句是一个完整SELECT查询语句必须要有的,其它的子句可以根据具体需要任选.上述的每个子句功能说明如下: (1)SELECT子句 列出所有要求SELECT语句进行检索的数据项,这些项可能取自数据库中关系表的列,也

基于SQL中的数据查询语句汇总

以下是对SQL中的数据查询语句进行了汇总介绍,需要的朋友可以过来参考下   where条件表达式 --统计函数 复制代码 代码如下: Select count(1) from student; --like模糊查询 --统计班上姓张的人数 复制代码 代码如下: select count(*) from student where realName like '张%'; --统计班上张姓两个字的人数 复制代码 代码如下: select count(*) from student where rea

SQL server中多种关键字查询数据

问题描述 SQL server中多种关键字查询数据 比如学生有姓名,学号,班级等列,我可以通过学号查询,也可以通过姓名查询 解决方案 两个办法,一个是首先在代码中判断输入的是全数字还是中文,分别执行不同的查询.或者写在一起:select * from table where 姓名=输入 or 学号=输入 解决方案二: select * from 学生表 where name = '姓名' or No='学号' 解决方案三: 可以使用动态sql拼接比如定义一个@sqltext 根据不同的情况拼接s

sql数据查询数据过滤问题

问题描述 sql数据查询数据过滤问题 id为1是原始数据,如果有数据和原始数据的carId和garageId这2个字段的值相等的话就不显示原始数据 否则就显示原始数据 解决方案 select * from table where (carId,garageId) not in (select * from table where id=1) yuanshishuju; 如果回答对您有帮助,请采纳

oracle goldengate-mybatis 打印的Sql语句可以再数据库查询到数据,但是没有返回结果?【急】

问题描述 mybatis 打印的Sql语句可以再数据库查询到数据,但是没有返回结果?[急] <select id="selectPageTblSfFiles" parameterType="TblSfFile" resultMap="TblSfFileResult"> SELECT <include refid="TblSfFile_columns" /> FROM TBL_SF_FILE WHERE

Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 2 -使用XQuery 查询XML数据

原文:Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 2 -使用XQuery 查询XML数据 XQuery 是一个浏览/返回XML实例的标准语言. 它比老的只能简单处理节点的XPath表达式更丰富. 你可以同XPath一样使用.或是遍历所有节点,塑造XML实例的返回等. 作为一个查询语言, 你需要一个查询处理引擎. SQL Server 数据库通过XML数据类型方法的T-SQL 语句来处理XQuery. SQL Server 并不支持所有的X