当前位置: 首页 > news >正文

Mysql如何高效的查询数据是否存在

文章目录

  • 1. 三种方法
  • 2. 查询语句执行流程
  • 3. 三种方式对比

1. 三种方法

在业务中,我们有时候需要查询某个数据在数据表中是否存在,常见的方式有三种

  1. SELECT COUNT(*) FORM tb_name WHERE condition
  2. SELECT 1 FROM tb_name WHERE condition
  3. SELECT EXISTS (SELECT 1 FROM tb_name WHERE condition)

2. 查询语句执行流程

在这里插入图片描述

其中:查询语句的执行流程是:

分析器 -> 权限校验 -> 执行器 -> 引擎 -> redo log(prepare状态) -> binlog -> redo log(commit状态)

3. 三种方式对比

在我们没有设置索引的前提下,执行SELECT COUNT 的时候,会在存储引擎层进行全表扫描,将所有符合查询条件的数据全部都找到,返回到Server层,再到Server层进行数据统计,将结果返回给用户

但是实际上,我们的目的是查询表里面是否有我们需要的数据即可,没有必要将所有的数据都查到
在这里插入图片描述

因此我们可以使用limit来进行改善

同样这种方式,在没有设置索引的情况下,也会进行全表扫描,但是通过这种方式,一旦通过条件,找到一条需要的数据,就不会再找了,将这条数据直接返回到Server层

在这里插入图片描述

这种方式的性能肯定比直接COUNT要好,因为他只会检索到一条数据

但是实际上,我们只需要知道表里面是否存在数据,我们并不需要整行的数据,因此可以使用EXISTS来进行再次优化

通过这种方式,通过LIMIT 1在引擎层进行检索,只要发现了数据,直接返回TRUE,再到SERVER层进行处理,最终返回1 / 0,表示存在 / 不存在

在这里插入图片描述

经过对比,很明显COUNT的性能是最低的,LIMIT 1EXISTS假设在数据量很小的情况下,当然差别不大,但是假设数据行里面是大文本内容,就会影响一定的性能

因此EXISTS通常是最好的方式

相关文章:

  • Jenkins(CI/CD工具)
  • OceanBase单机重启和配置修改
  • 自动伴随无人机说明文档
  • Redis 缓存并发问题深度解析:击穿、雪崩与穿透防治指南
  • 使用 LLM助手进行 Python 数据可视化
  • Python 数据可视化进阶:精准插入图表到指定 Excel 工作表
  • 手撕——贪吃蛇小游戏(下)
  • 如何通过挖掘需求、SEO优化及流量变现成功出海?探索互联网产品的盈利之道
  • Java高频面试之并发编程-08
  • C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 14)
  • 前端分页与瀑布流最佳实践笔记 - React Antd 版
  • ADC读取异常情况汇总
  • pcm数据不支持存储在json里面,需要先转base64
  • 机器学习——Seaborn练习题
  • 怎样给MP3音频重命名?是时候管理下电脑中的音频文件名了
  • 月之暗面开源-音频理解、生成和对话生成模型:Kimi-Audio-7B-Instruct
  • 【Java面试笔记:进阶】23.请介绍类加载过程,什么是双亲委派模型?
  • 第二章、在Windows上部署Dify:从修仙小说到赛博飞升的硬核指南
  • AI在医疗领域的10大应用:从疾病预测到手术机器人
  • madvise MADV_FREE对文件页统计的影响及原理
  • 我的科学观|张峥:AI快速迭代,我们更需学会如何与科技共处
  • 中央纪委办公厅公开通报3起整治形式主义为基层减负典型问题
  • 又一名90后干部被查,已有多人倒在乡镇领导岗位上
  • 杨荫凯已任浙江省委常委、组织部部长
  • 马上评丨从东方红一号到神二十,中国航天步履不停
  • 目前中美未进行任何经贸谈判,外交部、商务部再次表明中方立场