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的索引之前一定要考虑新建立的索引会不会对别的查询有影响,影响有多大,要充分考虑之后再决定是否要这个索引。

count(1), count(*), count(col) 的区别的更多相关文章

  1. MySQL中count(1),count(*),count(col)的区别

    count(*)返回行数的时候不管列中的值是不是null,在MyISAM表中,count(*)被优化,因为在MyISAM表中,行数被额外存储了,所以会很快,但是这个时候不能有where条件.innod ...

  2. Select count(*)、Count(1)、Count(0)的区别和执行效率比较

    记得很早以前就有人跟我说过,在使用count的时候要用count(1)而不要用count(*),因为使用count(*)的时候会对所有的列进行扫描,相比而言count(1)不用扫描所有列,所以coun ...

  3. 【hive】count() count(if) count(distinct if) sum(if)的区别

    表名: user_active_day (用户日活表) 表内容: user_id(用户id)   user_is_new(是否新用户 1:新增用户 0:老用户) location_city(用户所在地 ...

  4. COUNT(1)和COUNT(*)区别

    项目经常用到count(1),但是和count(*)什么区别? 从下面实验结果来看,Count (*)和Count(1)查询结果是一样的,都包括对NULL的统计,而count(列名) 是不包括NULL ...

  5. Count(*)或者Count(1)或者Count([列]) 区别

    在SQL 中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数.很多人其实对这三者之间是区分不清的.本文会阐述这三者的作用,关系以及背后的原理. 往常我经常会看到一些所 ...

  6. 【MySQL】技巧 之 count(*)、count(1)、count(col)

    只看结果的话,Select Count(*) 和 Select Count(1) 两着返回结果是一样的. 假如表沒有主键(Primary key), 那么count(1)比count(*)快,如果有主 ...

  7. select count(*)和select count(1)的区别 (转)

    A 一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的 假如表沒有主键(Primary key), 那么count(1)比count(*)快, 如果有主键 ...

  8. count(*),count(1)和count(主键) 区别

    看如下数据: SQL> select count(*) from ysgl_compile_reqsub; COUNT(*) ---------- 已用时间: : : 07.51 SQL) fr ...

  9. 关于数据库优化1——关于count(1),count(*),和count(列名)的区别,和关于表中字段顺序的问题

    1.关于count(1),count(*),和count(列名)的区别 相信大家总是在工作中,或者是学习中对于count()的到底怎么用更快.一直有很大的疑问,有的人说count(*)更快,也有的人说 ...

随机推荐

  1. JVM类加载(3)—初始化

    3.初始化 在准备阶段,变量已经赋过一次系统要求的初始值,而在初始化阶段,则根据程序员通过程序制定的主观计划去初始化类变量(静态变量)和其他资源,或者从另外一个角度表达:初始化过程是执行类构造器< ...

  2. 仿QQ底部切换(Fragment + Radio)

     第一步: activity_main.xml  布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/ ...

  3. JSP编译指令

    ----------------siwuxie095                             编译指令是通知 JSP 引擎的消息,其作用是设置 JSP 程序的属性, 以及由 JSP 生 ...

  4. 由hibernate配置inverse="true"而导致的软件错误,并分析解决此问题的过程

    题目背景软件是用来做安装部署的工具,在部署一套系统时会有很多安装包,通过此工具,可以生成一个xml文件用以保存每个安装包的文件位置.顺序.参数.所需脚本.依赖条件验证(OS..net.IIS.数据版本 ...

  5. 使用python ftplib包递归下载文件夹及文件

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2018-06-11 09:35:49 # @Author : Yaheng Wang ...

  6. PAM认证

    PAM认证 摘自: http://www.cnblogs.com/shenxm/p/8451889.html PAM(Pluggable Authentication Modules) Sun公司于1 ...

  7. 【NLP】中文分词:原理及分词算法

    一.中文分词 词是最小的能够独立活动的有意义的语言成分,英文单词之间是以空格作为自然分界符的,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,因此,中文词语分析是中文信息处理的基础与关键. ...

  8. Entity Framework Code-First(3):Setup Environment

    Setup Development Environment for EF Code-First: Let's setup the development environment for Code-Fi ...

  9. URAL 2021 Scarily interesting! (贪心+题意)

    题意:给定两个队伍的每个人的得分,让你安排怎么比赛才能使得观众知道冠军的时间最长. 析:贪心,很简单,就是先开始总分高的先出最差劲的,总分低的先出最厉害的,这个题当时实在是读的不明白啊,WA了好多次. ...

  10. POJ 3693 Maximum repetition substring (后缀数组+RMQ)

    题意:给定一个字符串,求其中一个由循环子串构成且循环次数最多的一个子串,有多个就输出最小字典序的. 析:枚举循环串的长度ll,然后如果它出现了两次,那么它一定会覆盖s[0],s[ll],s[ll*2] ...