使用exists代替count(*)判断数据是否存在

2023-09-23 12:23 阅读

很多时候我们需要判断某些数据是否存在,比如用户名是否存在,邮箱是否存在。

这是通常的做法是使用count(*),然后判断数据的条数,大于0则代表数据存在。

select (*) from ujcms_user t where t.username = ?

这种方式,数据库需要查询所有符合条件的数据后,才返回结果。如果是一个很大的表,则可能耗费较长时间。

exists可以在找到第一条数据后,就返回结果,性能更好。

select
    case
        when exists(
            select * from ujcms_article t where t.channel_id_ = #{channelId}
        )
        then 1
        else 0
    end as non_zero_exists

如果数据存在就返回1,不存在就返回0

咨询
交流群
电话