count(1)、count(*) 与 count(列名) 有什么区别?
-
上一篇
count(1)、count(*) 与 count(列名) 有什么区别?
<p><strong style="color: rgb(255, 76, 0);">1. count(1) and count(*)</strong></p><p><br></p><p>从执行计划来看,count(1)和count(*)的效果是一样的。</p><p>当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多! </p><p>当数据量在1W以内时,count(1)会比count(*)的用时少些,不过也差不了多少。</p><p><br></p><p>如果count(1)是聚集索引时,那肯定是count(1)快,但是差的很小。 </p><p>因为count(*),会自动优化指定到那一个字段。所以没必要去count(1),使用count(*),sql会帮你完成优化的 </p><p>因此:在有聚集索引时count(1)和count(*)基本没有差别! </p><p><br></p><p><strong style="color: rgb(255, 76, 0);">2. count(1) and count(字段)</strong></p><p><br></p><p>两者的主要区别是</p><ul><li>count(1) 会统计表中的所有的记录数,包含字段为null 的记录。</li><li>count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。 </li></ul><p><br></p><p><strong style="color: rgb(255, 76, 0);">3. count(*) 和 count(1)和count(列名)区别 </strong></p><p><br></p><p><strong>执行效果上: </strong></p><p><br></p><ul><li>count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略为NULL的值。 </li><li>count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略为NULL的值。</li><li>count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是指空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。</li></ul><p><br></p><p><strong>执行效率上: </strong></p><p><br></p><ul><li>列名为主键,count(列名)会比count(1)快 </li><li>列名不为主键,count(1)会比count(列名)快 </li><li>如果表多个列并且没有主键,则 count(1 的执行效率优于 count(*) </li><li>如果有主键,则 select count(主键)的执行效率是最优的 </li><li>如果表只有一个字段,则 select count(*)最优。</li></ul><p><br></p>
-
下一篇
count(1)、count(*) 与 count(列名) 有什么区别?
count(1)、count(*) 与 count(列名) 有什么区别?
相关文章
- 请解释HTTP的基本概念,以及在Golang中如何使用HTTP?
- 请解释一下PHP中的MVC模式是如何工作的?
- PHP中如何进行单元测试以及如何在开发过程中保证代码质量?
- 如何通过PHP来保护您的代码免受SQL注入攻击?
- 如何在Golang中实现单例模式?
- 请解释什么是defer语句,以及它有什么作用?
- 请给一个例子解释一下PHP中的闭包函数是什么?
- 请问PHP中如何实现多线程?
- PHP中如何处理文件上传和下载?
- 请举例说明PHP中如何处理异常?
- 请列出与PHP相关的缓存机制及其优缺点。
- 如何在Golang中进行并发编程?
- 在PHP中,Magic Method都有哪些,并举例说明它们的作用?
- 聊一下高并发和高性能的区别和联系?
- 请提供至少三个通过PHP实现的网站性能优化技巧。
- 请谈谈您对PHP的垃圾回收机制的了解及实践。
- 请描述在Golang中使用MongoDB时的最佳实践。
- PHP7和PHP5的性能上有什么差别?
- PHP中常用的设计模式有哪些?
- 请解释下PHP中会话(session)和Cookie(cookie)的作用。
微信收款码
支付宝收款码