Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2118286
  • 博文数量: 227
  • 博客积分: 10521
  • 博客等级: 上将
  • 技术积分: 3452
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-20 14:59
个人简介

低调做人,高调做事!

文章分类

全部博文(227)

文章存档

2013年(4)

2012年(8)

2011年(16)

2010年(24)

2009年(92)

2008年(83)

分类: LINUX

2009-04-07 21:41:05

有时候我们要查询一个数据表记录总数的时候,会用到标题中所列的的SQL语句,,当然有很多种方式,下面我们就详细分析这3种方式在mysql中的执行过程。


有这样一个表结构:

mysql> desc person;
+-------+----------------------+------+-----+---------+----------------+
| Field | Type                 | Null | Key | Default | Extra          |
+-------+----------------------+------+-----+---------+----------------+
| id    | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| name  | char(60)             | NO   | MUL | NULL    |                |
| descs | varchar(20)          | NO   | MUL | NULL    |                |
+-------+----------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)



mysql> explain select count(1) from person;
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
| 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 |
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
1 row in set (0.00 sec)


mysql> explain select count(*) from person;
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
| 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 |
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
1 row in set (0.00 sec)


mysql> explain select count(id) from person;
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
| 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 |
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
1 row in set (0.00 sec)


通过上面3种mysql的执行过程,我们可以看出,这3种方法的执行过程是一模一样的,不存在性能和效率上的差异。


注意:
1,对于MyISAM或者HEAP引擎,该查询返回的行数是准确值。
2,对于InnoDB,该查询返回的行数是一个近似值(事实上也是准确值,我测试几次也都是准确的)。
阅读(2957) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-09-05 17:21:52

菜鸟 差距那么大 竟然看不出来

chinaunix网友2009-04-08 18:07:06

太棒了,终于找到我用的了,谢谢哦!!