SQL查“存在”不靠COUNT,揭秘高效检索法

数据库 其他数据库
SQL不再使用count,而是改用LIMIT 1,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了,业务代码中直接判断是否非空即可。

根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要SELECT count(*) 呢?

无论是刚入道的程序员新星,还是精湛沙场多年的程序员老白,都是一如既往的count。

目前多数人的写法

多次REVIEW代码时,发现如下现象:

业务代码中,需要根据一个或多个条件,查询是否存在记录,不关心有多少条记录。普遍的SQL及代码写法如下:

##### SQL写法:
SELECT count(*) FROM table WHERE a = 1 AND b = 2

##### Java写法:
int nums = xxDao.countXxxxByXxx(params);
if ( nums > 0 ) {
    //当存在时,执行这里的代码
} else {
    //当不存在时,执行这里的代码
}

是不是感觉很OK,没有什么问题。

优化方案

推荐写法如下:

##### SQL写法:
SELECT 1 FROM table WHERE a = 1 AND b = 2 LIMIT 1

##### Java写法:
Integer exist = xxDao.existXxxxByXxx(params);
if ( exist != NULL ) {
    //当存在时,执行这里的代码
} else {
    //当不存在时,执行这里的代码
}

SQL不再使用count,而是改用LIMIT 1,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了,业务代码中直接判断是否非空即可。

总结

根据查询条件查出来的条数越多,性能提升的越明显,在某些情况下,还可以减少联合索引的创建。

责任编辑:武晓燕 来源: 一安未来
相关推荐

2020-12-03 09:05:38

SQL代码方案

2020-07-28 17:08:43

SQL数据库

2012-04-20 12:30:23

2010-10-20 10:55:54

SQL Server全

2009-07-06 18:18:41

SQL Server全

2023-08-11 09:00:00

2010-11-10 14:18:15

SQL SERVER全

2011-12-26 14:11:47

三星Android

2011-09-16 13:15:38

SQL Server优化

2014-08-04 09:30:43

170

2010-05-28 18:53:36

配置SVN1.4.5

2010-07-21 09:58:21

SQL Server全

2015-07-13 11:39:25

SphinxSQL

2010-01-04 15:27:31

ADO.NET SQL

2024-06-05 08:14:26

SpringElasticsea人脸数据

2021-07-29 11:00:43

Hologres QPS 在线服务

2021-07-13 07:52:03

SQL面试COUNT(*)

2011-03-29 12:42:25

SQL Server 高效性

2012-08-06 10:09:52

点赞
收藏

51CTO技术栈公众号