在以前,我想判断符合某个条件的数据是否存在时,都是使用count(*) 查询出记录数量,然后在在业务代码中通过 count > 0 来判断是否存在。但是count(*) 是会统计多行数据的,我们只是希望判断有没有数据,而不需要知道多少条数据,这时候用 count(*) 似乎有点浪费性能。后来在网上看到说用 limit 1 来优化count(*) 的性能,乍一看感觉蛮有道理的,但是!!!实际查询一下就发现不对劲了。
    image.png
    然后我们通过 explain 来看下这条sql的执行情况
    image.png
    坑爹呢,这limit 1 加了也没用啊!!!
    其实稍微分析一下就能明白,limit 1 影响的是返回结果的行数,而 count(*) 返回结果正好就是一行,所以limit 1 其实对于 count(*) 来说是根本没有意义的
    如果我们只是想判断记录是否存在的话,其实可以通过

    1. select 1 from table where field = 'xxx' limit 1

    然后再业务代码中判断返回值是否为null,如果为null 的话,就说明不存在。