• count有关


    1、count有两个作用:统计某个字段有值的记录数;统计结果集的记录数。
    2、count括号内的表达式不为null,就是统计结果集的记录数。也就是说,count(1),count(*),count(100),count('aa')
    都是等价的,对于说法,count(1) 是第一个字段,count(*)展开成所有的列,都是错误的。
    注:括号内的表达式为null,即count(null)返回 0
    3、count(*) 统计结果集的记录数,也就是总的行数,而主键是不允许为null的,因此主键取值的个数也就是行数。
    count(*) 也就可以认为对主键扫描,与count(key)一样,而innodb肯定是有主键索引的。
    4、因此,count(*) 与count(key)的效率基本一样。而对于一般的字段,count(col) 效率要差很多。
    但是这要根据实际的需求,如果是查询总的行数,使用count(*),如果查询某一个字段有值的个数,使用count(col)
    5、有些情况下,不要求精确值,只需要记录的近似值。这个时候可以使用查询执行计划,如下:
    desc select count(*) from student;
    效率非常高,返回扫描的行数是个近似值。
    6、查询执行计划返回的信息记录在information_schema.tables,查询tables也可以得到行数,如下:
    select table_name,table_rows from information_schema.tables where table_name='student';
    7、特别注意:对于MyISAM引擎,select count(*) from student; 不带where,查询效率非常高,原因是:MyISAM引擎记录了总的行数,
    因此直接返回。根据这个特点,考虑id<5的记录很少,对于 select count(*) from student where id >5; 可以转化为
    select count(*) from student;减去 select count(*) from student where id <=5;
    这样大大地减少了扫描的行数。

  • 相关阅读:
    智能指针shared_ptr新特性shared_from_this及weak_ptr
    reactor模型框架图和流程图 libevent
    memset struct含有string的崩溃
    对于socket发送数据时是否要加锁及write read的阻塞非阻塞
    记录智能指针使用shared_ptr使用错误
    本地缓存和redis
    关于数据结构跳表的一些介绍
    linux 下source、sh、bash、./执行脚本的区别
    socket端口复用问题一二
    MD5算法
  • 原文地址:https://www.cnblogs.com/nzbbody/p/4752040.html
Copyright © 2020-2023  润新知