limit1数据库优化
场景使用
工作中对于某些特殊场景使用limit 1可以大大加快sql语句的效率。
如判断用户名是否已经使用:
select count(user_nme) from table where user_name = 'XXX' limit 1;
这种场景下只要有一条数据便可以判断出用户名已重复,从而不需要浪费资源继续向下检索
又或者是当我们认为某个字段是唯一的,但是该字段并没有添加索引,
如身份证号
select * from table where num_id = 'XXX' limit 1;
这种场景查到一条也可以获得数据,因为字段唯一,所以也不需要向下继续查询
注意
当字段已经添加索引,或者字段为主键时,limit 1加与不加效率并不会产生变化
如id为主键:
select * from table where id ='1';
select * from table where id ='1' limit 1;
这种情况下是不需要添加limit 1的
扩展
再业务场景要求高的数据库,对于单条的delete和update,在后面加上limit 1也会提高效率
道理同上!同时还能预防delete或者update的sql编写失误导致的大面积数据变更。
不加limit容易误删输出;
表的本身字段多,数量大,同时又要删除较多数据时,直接一次性删除会形成长事务,占用锁的事件也比较长,有可能影响其他业务;
delete * from tble --where trsDate='1' --limit 10000
当出现以上这种情况其实可以考虑循环删除,将长事务转化为多个较短的事务,串行执行,使客户端的等待时间缩短。