龙空技术网

数据库常见面试题

程序员叶伟 2773

前言:

目前小伙伴们对“jsjquery面试题”大约比较关怀,你们都需要剖析一些“jsjquery面试题”的相关知识。那么小编在网摘上汇集了一些关于“jsjquery面试题””的相关内容,希望我们能喜欢,大家一起来了解一下吧!

查询总数为什么不要使用count(字段)而应该使用count(*)?

数据库中查询总数为什么不要使用count(字段)而应该使用count(*)?这个问题在数据库相关知识的面试题当中还是经常会被遇到的,主要就是用于考察你对数据库基础知识的了解,倒不是多么复杂的问题。

在SQL中不管是count(*)也好,count(1)也好,还是count(字段)也好,其实都是用于计算表中的行数,但是它们之间确实是有一些微妙的差异的。

·对于要查询所有的场景中一般都会使用count(*),它会计算表中的所有行,不会考虑这条记录里面的字段值是不是null,会把所有的记录表中的记录数全部捞出来。

·但是对于count(字段)来说,它会把表中该字段为null的记录给剔除掉,只统计不为null的记录数。从统计的场景来看99%的场景其实都是要统计所有记录的,不需要把某个字段为null的记录给踢掉,除非真的不要统计字段不为null的情况,这个时候用count(字段)就是正确的使用场景。

·当然如果字段设置了索引是唯一的索引,比如ID,这种情况下其实不管是用count(*)还是count(字段),统计出来的数据其实都是一样的。而且从性能上来讲count(ID)可能会比count(*)稍微快一点,因为数据库可以更快的遍历索引来计数,当然这个也取决于具体的数据库查询的优化器了。

·对于count(1)来说其实和count(*)在很多情况下在数据库系统中是一样的,这里的1其实是一个常量表达式,所以count(1)、也会计算表中所有行,而且从性能上来看也没有什么特别大的差异。具体应该怎么使用完全是区别于团队或者个人的编码风格或者是习惯。

本期文章就到这里,如果您对本期内容有任何疑问,欢迎大家评论区给我留言,谢谢大家。

标签: #jsjquery面试题