zoukankan      html  css  js  c++  java
  • mysql之count

    两种引擎对count的处理

    CREATE TABLE `test` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `name` char(15) DEFAULT NULL,
      `age` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
    
    mysql> explain select count('id') from test;
    +----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
    | id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra                        |
    +----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
    |  1 | SIMPLE      | NULL  | NULL | NULL          | NULL | NULL    | NULL | NULL | Select tables optimized away |
    +----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
    
    mysql> explain select count('id') from test where id > 1;
    +----+-------------+-------+-------+---------------+---------+---------+------+------+--------------------------+
    | id | select_type | table | type  | possible_keys | key     | key_len | ref  | rows | Extra                    |
    +----+-------------+-------+-------+---------------+---------+---------+------+------+--------------------------+
    |  1 | SIMPLE      | test  | index | PRIMARY       | PRIMARY | 4       | NULL |    3 | Using where; Using index |
    +----+-------------+-------+-------+---------------+---------+---------+------+------+--------------------------+
    
    myisam保存了记录的总数,直接返回结果, 但是加where条件之后就必须全表扫描了
    
    
    CREATE TABLE `test` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `name` char(15) DEFAULT NULL,
      `age` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
    
    mysql> explain select count(*) from test;
    +----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+
    | id | select_type | table | type  | possible_keys | key     | key_len | ref  | rows | Extra       |
    +----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+
    |  1 | SIMPLE      | test  | index | NULL          | PRIMARY | 4       | NULL |    3 | Using index |
    +----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+
    
    mysql> explain select count(*) from test where id > 2;
    +----+-------------+-------+-------+---------------+---------+---------+------+------+--------------------------+
    | id | select_type | table | type  | possible_keys | key     | key_len | ref  | rows | Extra                    |
    +----+-------------+-------+-------+---------------+---------+---------+------+------+--------------------------+
    |  1 | SIMPLE      | test  | range | PRIMARY       | PRIMARY | 4       | NULL |    1 | Using where; Using index |
    +----+-------------+-------+-------+---------------+---------+---------+------+------+--------------------------+
    
    innodb全表扫描了
    

    note: Using index 使用到覆盖索引,就是直接统计索引了,没有再根据索引去找数据

  • 相关阅读:
    echarts设置数据在轴线上显示
    LeetCode【189. 旋转数组】
    pycharm快捷键
    LeetCode【461. 汉明距离】
    LeetCode【1051. 高度检查器】
    LeetCode【509. 斐波那契数】
    LeetCode【1021. 删除最外层的括号】
    LeetCode【206. 反转链表】
    LeetCode【344. 反转字符串】
    tensorboard运行
  • 原文地址:https://www.cnblogs.com/wangweiwen/p/6560156.html
Copyright © 2011-2022 走看看