快速判断数据库中某条数据是否存在
实际项目中经常会遇到判断数据是否存在的情况。一般都是直接查询数据库,查到认为存在,否则就是不存在。
实际项目中可能会存在如下代码
SELECT * FROM `t_user` where username='tw'
这种实现方式没有问题,但是如果只是单纯的判断数据是否存在,似乎有点小题大做。
下面推荐一种方式(在索引等其他条件都相同的情况下):
SELECT count(*) FROM `t_user` where username='tw' limit 1
如果只是单纯的判断是否存在,不涉及后续操作,那么下面这种方式无疑更好。如果你后需还需要使用这些数据,那么直接查出来,然后判断是否存在也是可以的。
其实就跟使用map
数据结构这种一样,如果想从map
里面根据key
取出某个value
。当然可以先调用contains
判断是否存在,然后直接取,或者直接调用get
方法取值,通过取出来的值也可以判断是否存在。
为什么加limit 1后查询速度会快?
疑惑:
按照mysql的语句执行顺序,limit是在where跟select之后执行的,是不是说执行完select之后才执行limit,那么在执行完select的时候,不是已经产生了满足email条件的全量的虚拟表了么,然后才从这个虚拟表里面取了一条记录出来,感觉这样并不会快啊,
实际上是因为整个执行sql的过程,是一步一步的,其实上面这个想法没错,确实是一步一步来完成的,但考虑到内存资源有限,并不是会把所有数据过滤出来后,在做下一步操作。
而是按照总体次序,先where,然后limit,但是这个过程并不说 mysql要做完所有的where之后,才会应用limit,而是做一步,判断一下,次序总是先where,后limit判断,这个次序是不变的。
同样的,先where后select,是做一步where,然后再select,所以,如果数据量大,你会发现数据都是一部分一部分出来的,不会一下子出来。