1、count(1)和count(*)都是统计表的总行数,两者执行结果相同。表没有主键或者唯一键索引时,两者都进行全表扫描;表上主键或者唯一键索引时,使用主键或者唯一键索引。

2、count(col)则是统计col列中不为空的总行数,如果该列存在索引,自动使用索引,否则否则全表扫描。

3、总结:
(1)count(*)和count(1)执行的效率是完全一样的;
(2)count(*)的执行效率比count(col)高,因此可以用count(*)的时候就不要去用count(col);
(3)count(col)的执行效率比count(distinct col)高,不过这个结论的意义不大,这两种方法也是看需要去用;
(4)如果是对特定的列做count的话建立这个列的非聚集索引能对count有很大的帮助;
(5)如果经常count(*)的话则可以找一个最小的col建立非聚集索引以避免全表扫描而影响整体性能;
(6)如果数据库使用的是MyISAM存储引擎,在不加WHERE限制条件的情况下,COUNT(*)与COUNT(COL)基本可以认为是等价的,在有WHERE限制条件的情况下,COUNT(*)会比COUNT(COL)快非常多,原因是当没有WHERE语句对整个MYSQL表进行COUNT运算时,MyISAM类型的表中保存有总得行数,当添加有WHERE限定语句时MYSQL需要对整个表进行检索从而得出COUNT的数值。

在建立优化count的索引之前一定要考虑新建立的索引会不会对别的查询有影响,影响有多大,要充分考虑之后再决定是否要这个索引。

最新文章

  1. jdbc数据源配置
  2. poj 1010
  3. iOS设计模式简介
  4. [资料]Nginx做IP访问限制以及正则规则
  5. 将博客搬至CSDN(放弃)
  6. 和为S的两个数VS和为S的连续正数序列
  7. IO负载高的来源定位 IO系列
  8. Bzoj 3809: Gty的二逼妹子序列 莫队,分块
  9. vue1.0和vue2.0的区别(二)
  10. GitHub新手使用教学(从安装到使用)
  11. 设计模式之jdk动态代理模式、责任链模式-java实现
  12. Linux screenshot
  13. Python二进制转十进制算法、十进转二进制算法
  14. oracle flashback data archive闪回数据归档天坑之XID重用导致闪回查询数据重复
  15. linux ---> taskkill pid 8080 /f
  16. Bootstrap - select2
  17. openlayers3教材详解及demo(完整)
  18. CocoStudio
  19. hbase启动异常的慢
  20. Java之IO流(字节流,字符流)

热门文章

  1. 浅谈Huffman树
  2. Linux keepalived与lvs的深入分析
  3. ZAB与Paxos算法的联系与区别
  4. 杂项:BI(商业智能)
  5. js---数组习题---
  6. Python模块-sys模块
  7. position应用之相对父元素的定位
  8. Python学习:命令行运行,循环结构
  9. PopupWindow 防微信弹出右 侧窗体(继承PopupWindow )
  10. SpringMVC的国际化