SQL优化实战-0001:SQL查找是否存在,不要再使用count

简介: SQL优化实战-0001:SQL查找是否存在,不要再使用count

1.需求分析与普遍SQL写法

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

select count(*) from the_table_name where ...  

Java写法:

int nums = xxDao.countXxxxByXxx(params);
if( nums > 0 ){
    //当存在时,执行这里
}else{
    //当不存在时,执行这里
}

2.问题分析

采用上述SQL语句,即会去查询所有满足 where 条件的记录。而我们的需求只是判断是否存在满足where的记录,因此查询到一条又继续查找其它满足条件的记录是完全没有必要的。这对数据库的性能也会造成一定影响。

3.优化方案

优化方案:改用 LIMIT 1,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了。

select 1 from the_table_name 
where ...  
limit 1

业务代码中直接判断是否非空即可:

/*
  解释为什么是判断非空:
    我们优化后的SQL语句:select 1 ... limit 1
    至多查询一条记录
      - 如果查询到了,那么返回 1,可以用Integer接收
      - 如果没有查询到,那么就是返回 null,
        这也是为什么我们的 isExist 不能是int类型的原因
        不能用基元类型去接收 null
  而对于我们最开始提到的普遍SQL语句,为什么能用int接收呢?
    因为 select count(*) 的查询结果一定是一个 >= 0 的整数
    因此在 应用层(Java端)接收到的一定是一个整数,不会出现接收 null 的情况
*/
Integer isExist = xxDao.countXxxxByXxx(params);
if( isExist != NULL ){
    //当存在时,执行这里
}else{
    //当不存在时,执行这里
}

4.总结

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

5.补充

5.1 还有什么时候可以使用LIMIT 1

针对的是会扫描全表的 SQL 语句,如果你可以确定结果集只有一条,那么加上LIMIT 1的时候,当找到一条结果的时候就不会继续扫描了,这样会加快查询速度。

5.2 什么时候没必要使用LIMIT 1

如果数据表已经对字段建立了主键索引或唯一索引,那么可以通过索引进行查询,不会全表扫描的话,就不需要加上LIMIT 1了。


相关文章
|
18天前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
27天前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
87 10
|
26天前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
|
12天前
|
SQL 缓存 监控
SQL性能提升指南:五大优化策略与十个实战案例
在数据库性能优化的世界里,SQL优化是提升查询效率的关键。一个高效的SQL查询可以显著减少数据库的负载,提高应用响应速度,甚至影响整个系统的稳定性和扩展性。本文将介绍SQL优化的五大步骤,并结合十个实战案例,为你提供一份详尽的性能提升指南。
36 0
|
2月前
|
SQL 资源调度 分布式计算
如何让SQL跑快一点?(优化指南)
这篇文章主要探讨了如何在阿里云MaxCompute(原ODPS)平台上对SQL任务进行优化,特别是针对大数据处理和分析场景下的性能优化。
|
2月前
|
SQL 监控 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响
|
2月前
|
SQL 数据库 索引
SQL中COUNT函数结合条件使用的技巧与方法
在SQL查询中,COUNT函数是一个非常常用的聚合函数,用于计算表中满足特定条件的记录数
|
2月前
|
SQL 关系型数据库 PostgreSQL
遇到SQL 子查询性能很差?其实可以这样优化
遇到SQL 子查询性能很差?其实可以这样优化
99 2
|
2月前
|
SQL 存储 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响
|
2月前
|
SQL 数据处理 数据库
SQL语句优化与查询结果优化:提升数据库性能的实战技巧
在数据库管理和应用中,SQL语句的编写和查询结果的优化是提升数据库性能的关键环节