关于MySQL判断表中是否存在某数据用COUNT还是LIMIT实测

关于MySQL判断表中是否存在某数据用COUNT还是LIMIT实测

在日常开发中我们经常会遇到需要判断数据库中是否存在某数据的情况,这时候就会纠结是用COUNT还是LIMIT或者什么时候该用COUNT什么时候该用LIMIT,今天我们就来实测一下。

前置环境

服务器环境:阿里云2核2G云服务器

MySQL版本:8.0.36

MySQL引擎:InnoDB

测试表:测试表结构是我实际工作中的表结构这里就不贴出来了,表中有近百个字段。PS:我知道字段多得不合理已经在设计拆表了

测试

同一张表我们测试两种表数据量1W条数据和500W条数据。模拟实际中的中小表和大表。每条测试5次将测试结果展示出来,下面上结果:

1w条数据COUNT

SELECT COUNT(*) FROM order WHERE activity_id = '14d9fcb4-b2c1-4241-9207-db79ac01582d'

执行时长:0.709s|0.714s|0.705s|0.716s|0.772s

1w条数据limit

SELECT id FROM order WHERE activity_id = '14d9fcb4-b2c1-4241-9207-db79ac01582d' LIMIT 1

执行时长:0.852s|0.950s|0.859s|0.833s|0.897s

1w条数据COUNT+索引

SELECT COUNT(*) FROM order WHERE customer_id = '534d41c5-7253-429f-a88e-25ea48076b90'

执行时长:0.302s|0.204s|0.272s|0.166s|0.341s

1w条数据limit+索引

SELECT id FROM order WHERE customer_id = '534d41c5-7253-429f-a88e-25ea48076b90' LIMIT 1

执行时长:0.564s|0.620s|0.592s|0.620s|0.677s

500w条数据COUNT

SELECT COUNT(*) FROM order WHERE activity_id = 'ec95897a-3b5a-473e-b22c-cdbcd1c95f40'

执行时长:8.565s|8.949s|8.493s|8.186s|8.704s

500w条数据limit

SELECT id FROM order WHERE activity_id = 'ec95897a-3b5a-473e-b22c-cdbcd1c95f40' LIMIT 1

执行时长:1.049s|1.163s|1.172s|1.318s|1.206s

500w条数据COUNT+索引

SELECT COUNT(*) FROM order WHERE customer_id = 'a147ba3d-7d0e-460d-885c-706fb1ff7050'

执行时长: 1.440s|1.380s|1.503s|1.648s|1.422s

500w条数据limit+索引

SELECT id FROM order WHERE customer_id = 'a147ba3d-7d0e-460d-885c-706fb1ff7050' LIMIT 1

执行时长:0.677s|0.833s|0.812s|0.734s|0.795s

总结

  1. 当表数据量小的时候COUNT仍然是不二选择
  2. 当表数据量大的时候limit可以避免全表扫描效率比COUNT要高,当然这需要你的表里有符合条件的数据
  3. 对于需要经常查询的字段加上索引能显著的提升查询效率
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值