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了。


相关文章
|
1天前
|
存储 SQL 关系型数据库
掌握高性能SQL的34个秘诀🚀多维度优化与全方位指南
掌握高性能SQL的34个秘诀🚀多维度优化与全方位指南
|
9天前
|
SQL 存储 关系型数据库
【MySQL系列笔记】SQL优化
SQL优化是通过调整数据库查询、索引、表结构和配置参数等方式,提高SQL查询性能和效率的过程。它旨在减少查询执行时间、减少系统资源消耗,从而提升数据库系统整体性能。优化方法包括索引优化、查询重写、表分区、适当选择和调整数据库引擎等。
187 3
|
11天前
|
存储 SQL 缓存
30个业务场景的SQL优化
这些优化策略和示例可以帮助改善 `SQL` 查询的性能和效率。在实践中,需要综合考虑数据库设计、`SQL` 编写、服务器配置等多方面因素,选择合适的优化方法,并进行充分的测试和验证。以上 30 个经验是 V 哥在实际经验中总结的内容,当然,业务场景不同,具体的优化策略也会不同,按实际情况处理,这不就是程序员要做的事情么。
|
11天前
|
SQL 存储 算法
clickhouse SQL优化
clickhouse 是 OLAP 数据库,但其具有独特的索引设计,所以如果拿 MySQL 或者其他 RDB 的优化经验来优化 clickhouse 可能得不到很好的效果,所以特此单独整理一篇文档,用于有 SQL 优化需求的同学,本人接触 clickhouse 时间也不长,难免有不足的地方,如果大家发现错误,还请不吝指正。
|
14天前
|
SQL 关系型数据库 MySQL
【MySQL】SQL优化
【MySQL】SQL优化
|
15天前
|
SQL 存储 关系型数据库
MySQL SQL优化
MySQL SQL优化
16 0
|
18天前
|
SQL 分布式计算 资源调度
一文解析 ODPS SQL 任务优化方法原理
本文重点尝试从ODPS SQL的逻辑执行计划和Logview中的执行计划出发,分析日常数据研发过程中各种优化方法背后的原理,覆盖了部分调优方法的分析,从知道怎么优化,到为什么这样优化,以及还能怎样优化。
103481 1
|
21天前
|
SQL 关系型数据库 MySQL
explain是什么?explain优缺点及如何使用explain优化SQL
explain是什么?explain优缺点及如何使用explain优化SQL
42 1