zoukankan      html  css  js  c++  java
  • High Performance MySQL笔记:count

    在SQL中使用count()好像是非常自然的事情:

    SELECT COUNT(*) FROM TABLE_NAME;
    

    有时候确实会想过,count(*)和单独的count(column_name)有什么区别,会不会后者效率更好(太拿衣服。。。),不过一直没有去追究。

    Chapter 6:Query Perfomance Optimization中专门有一节讲了count

    count(column_name):只会计算该column上非NULL的行数,这个行为和其他聚集函数一样(SUM会忽略NULL的行)

    count(*):就是统计行数

    其实count()里面是可以放入表达式的(或者说上述两种情况就是两类特殊的表达式):

    SELECT COUNT(IF(hbase_app_id is NULL, 1, NULL)) FROM im_task;
    

    此时count得到的就是该列上为null的行数了,再如一个文中的例子:

    SELECT COUNT(color = 'blue' OR NULL) AS blue, COUNT(color = 'red' OR NULL) AS red FROM items;
    

     注意:

    count(NULL) = 0, 其他非NULL的表达式都算做1(对于每一行来说)

    (SELECT 'COUNT(0)' AS count_type, 	COUNT(0) as value)
    UNION
    (SELECT 'COUNT(1)', 			COUNT(1))
    UNION
    (SELECT 'COUNT(NULL)', 			COUNT(NULL))
    

    返回结果如下:

    count_type,      value
    COUNT(0),       1
    COUNT(1),       1
    COUNT(NULL),    0

    文中也对MyISAM引擎对count执行速度进行了解释:

    因为MyISAM引擎内部存储了表的确切行数,所以当count(*)时不带有其他的可以筛选行的条件,就直接使用引擎提供的数值了

  • 相关阅读:
    spring基于xml导入配置文件
    spring中bean的继承和依赖关系
    spring整合junit
    spring新注解说明
    Web微信开发工具无法输入中文?官方bug
    vue踩坑 导出new Vue.Store首字母要大写
    关于vue ui组件
    vue组件的生命周期
    Vue的指令以及组件化开发
    webpack的npm扩展使用
  • 原文地址:https://www.cnblogs.com/lailailai/p/4226737.html
Copyright © 2011-2022 走看看