MySQL的COUNT()函数利用索引进行计算
2017-03-13 19:06
393 查看
以前写过一篇《select count(*) 和 select count(1)有什么区别? 》,参见: http://blog.163.com/li_hx/blog/static/18399141320146961258398/
现执行如下SQL并进一步分析如下:
----------------------------------------------
现执行如下SQL并进一步分析如下:
----------------------------------------------
mysql> CREATE TABLE t_count (id INT PRIMARY KEY, uk INT, k1 INT, k2_1 INT, k2_2 INT, col INT, UNIQUE KEY (uk), KEY k1(k1), KEY k2 (k2_1, k2_2 Query OK, 0 rows affected (0.28 sec) mysql> INSERT INTO t_count values (1,1,1,1,1,1),(2,2,2,2,2,2),(3,3,3,3,3,3),(4,4,4,4,4,4),(5,5,5,5,5,5),(6,6,6,6,6,6),(7,NULL,NULL,NULL,NULL, Query OK, 7 rows affected (0.03 sec) Records: 7 Duplicates: 0 Warnings: 0 mysql> SELECT COUNT(*),COUNT(1),COUNT(id),COUNT(uk),COUNT(k1),COUNT(k2_1),COUNT(k2_2),COUNT(col) FROM t_count; +----------+----------+-----------+-----------+-----------+-------------+-------------+------------+ | COUNT(*) | COUNT(1) | COUNT(id) | COUNT(uk) | COUNT(k1) | COUNT(k2_1) | COUNT(k2_2) | COUNT(col) | +----------+----------+-----------+-----------+-----------+-------------+-------------+------------+ | 7 | 7 | 7 | 6 | 6 | 6 | 6 | 6 | +----------+----------+-----------+-----------+-----------+-------------+-------------+------------+ 1 row in set (0.01 sec) MySQL---聚集函数的优化详解 》 http://blog.163.com/li_hx/blog/static/183991413201523153748830/?COLLCC=858502883&COLLCC=3257644771&COLLCC=826142342&COLLCC=306048646&
mysql> EXPLAIN SELECT COUNT(uk) FROM t_count; +----+-------------+---------+------------+-------+---------------+------+---------+------+------+----------+-------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+---------+------------+-------+---------------+------+---------+------+------+----------+-------------+ | 1 | SIMPLE | t_count | NULL | | 5 | NULL | 8 | 100.00 | Using index | +----+-------------+---------+------------+-------+---------------+------+---------+------+------+----------+-------------+ 1 row in set, 1 warning (0.00 sec) mysql> EXPLAIN SELECT COUNT(k1) FROM t_count; +----+-------------+---------+------------+-------+---------------+------+---------+------+------+----------+-------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+---------+------------+-------+---------------+------+---------+------+------+----------+-------------+ | 1 | SIMPLE | t_count | NULL | | 5 | NULL | 8 | 100.00 | Using index | +----+-------------+---------+------------+-------+---------------+------+---------+------+------+----------+-------------+ 1 row in set, 1 warning (0.00 sec) mysql> EXPLAIN SELECT COUNT(k2_1) FROM t_count; +----+-------------+---------+------------+-------+---------------+------+---------+------+------+----------+-------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+---------+------------+-------+---------------+------+---------+------+------+----------+-------------+ | 1 | SIMPLE | t_count | NULL | index | NULL | k2 | 10 | NULL | 8 | 100.00 | Using index | +----+-------------+---------+------------+-------+---------------+------+---------+------+------+----------+-------------+ 1 row in set, 1 warning (0.00 sec) mysql> EXPLAIN SELECT COUNT(k2_2) FROM t_count; +----+-------------+---------+------------+-------+---------------+------+---------+------+------+----------+-------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+---------+------------+-------+---------------+------+---------+------+------+----------+-------------+ | 1 | SIMPLE | t_count | NULL | index | NULL | k2 | 10 | NULL | 8 | 100.00 | Using index | +----+-------------+---------+------------+-------+---------------+------+---------+------+------+----------+-------------+ 1 row in set, 1 warning (0.00 sec) mysql> EXPLAIN SELECT COUNT(col) FROM t_count; +----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-------+ | 1 | SIMPLE | t_count | NULL | ALL | NULL | NULL | NULL | NULL | 8 | 100.00 | NULL | +----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-------+ 1 row in set, 1 warning (0.00 sec)
相关文章推荐
- mysql中利用ceil函数对成绩进行分段统计
- mysql利用AES_DECRYPT函数进行字段加密
- MySQL查询优化一例---自动利用索引进行优化
- 利用函数公式进行贷款的计算
- MySQL中利用索引对数据进行排序的基础教程
- 在Excel表格中插入函数,利用公式进行计算
- Asp利用DateAdd 函数进行时间相加计算问题
- MySQL中利用索引对数据进行排序的基础教程
- 利用函数公式进行贷款的计算
- SQL技巧:利用阶梯式累加进行累计数量的计算
- 在SQL2005中利用NTILE()排名函数对现有数据进行排序改造
- 继:VC中利用CCmdTarget进行的成员函数回调
- 利用CAL进行并行计算
- 利用Oracle内置分析函数进行高效统计汇总(2)
- 在SQL2005中利用DENSE_RANK()排名函数对现有数据进行排序改造
- C++友元friend --c++利用friend修饰符,可以让一些你设定的函数能够对这些保护数据进行操作
- Linux网络编程一步一步学-利用OpenSSL提供的SSL操作函数进行加密通讯原始例子
- 利用Mysql的DATE_FORMAT()进行日期格式转换
- 利用Oracle内置分析函数进行高效统计汇总(1)
- SQL Server中,计算count(*),优化器会使用聚集索引还是非聚集索引?