• MySql-count(*)与count(id)与count(字段)之间的执行结果和性能分析


    在mysql数据库中,当我们需要统计数据的时候,一定会用到count()这个方法,那么count(值)里面的这个值,到底应该怎么选择呢!常见有3种选择,(*,数字,列名),分别列出它们的执行结果和性能对比。

    执行效果:  
    count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL 
    count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL  
    count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是指空字符串或者0,而是null)的计数,即某个字段值为NULL时,不统计。

    测试结果:  

     1 CREATE TABLE `test_count` (
     2   `id` int(11) NOT NULL AUTO_INCREMENT,
     3   `phone` varchar(11) DEFAULT NULL,
     4   `nick_name` varchar(50) DEFAULT NULL,
     5   `username` varchar(50) DEFAULT NULL,
     6   `password` varchar(50) DEFAULT NULL,
     7   `gender` tinyint(1) DEFAULT NULL,
     8   `is_del` tinyint(1) DEFAULT NULL,
     9   PRIMARY KEY (`id`),
    10   KEY `index_username` (`username`) USING BTREE
    11 ) ENGINE=InnoDB AUTO_INCREMENT=17805 DEFAULT CHARSET=utf8;
     1 [SQL] SELECT COUNT(*) FROM test_count;
     2 受影响的行: 0
     3 时间: 0.828ms
     4  
     5 [SQL] 
     6 SELECT COUNT(1) FROM test_count;
     7 受影响的行: 0
     8 时间: 0.827ms
     9  
    10 [SQL] 
    11 SELECT COUNT(id) FROM test_count;
    12 受影响的行: 0
    13 时间: 0.873ms
    14  
    15 [SQL] 
    16 SELECT COUNT(username) FROM test_count;
    17 受影响的行: 0
    18 时间: 0.981ms
    19  
    20 [SQL] 
    21 SELECT COUNT(nick_name) FROM test_count;
    22 受影响的行: 0
    23 时间: 7.673ms

    在100W+数据下,count(*)和count(1)差距微乎其微,但两者效率大于count(id),count(id)效率明显大于count(column),带索引的count(column)明显效率高于不带索引的。

    最终结论:

    count(1) > count(*) > count(主键id) > count(带索引column) > count(不带索引column),count(1)效率稍微高于count(*),但差距微乎其微。

  • 相关阅读:
    SQL的join使用图解
    归并排序的JAVA实现
    java 快速排序 时间复杂度 空间复杂度 稳定性
    哈希表(HashMap)分析及实现(JAVA)
    外部排序
    海量数据面试题整理
    《CSS3秘籍》第6、7章
    《CSS3秘籍》第3-5章
    《CSS3秘籍》第1、2章
    《HTML5与CSS3基础教程》第11、14-16、18章
  • 原文地址:https://www.cnblogs.com/firstlady/p/10522241.html
Copyright © 2020-2023  润新知