众所周知,InnoDB和MyISAM是mysql中最常用的两种表的类型,MyISAM是默认的类型。它们的区别很多,主要是侧重点不同,InnoDB支持一些高级处理,而MyISAM强调性能,当然强调性能的同时就要牺牲一些东西了。

  现在对比一下统计行数的语句(select count(*)|(1)|(Primary Key)),在Mysql中新建两个表,分别是MyISAM和InnoDB类型的:

代码


CREATE   TABLE   `Table1` (
  `id`  int ( 11 )  NOT   NULL ,
  `name`  char ( 50 )  character   set  ucs2  default   NULL ,
   PRIMARY   KEY   (`id`)
) ENGINE = MyISAM  DEFAULT  CHARSET = latin1

CREATE   TABLE   `Table2` (
  `id`  int ( 11 )  NOT   NULL ,
  `name`  char ( 50 )  character   set  ucs2  default   NULL ,
   PRIMARY   KEY   (`id`)
) ENGINE = InnoDB  DEFAULT  CHARSET = latin1



mysql 怎么查询哪些表做了新增操作 mysql中有哪些表_mysql 怎么查询哪些表做了新增操作


然后随机的往这两张表中插入一些记录,比如都插入2条。

然后执行一下语句:


select   count ( * )  from  Table1
select   count ( * )  from  Table2


注意:这里的count(*)和count(id)及count(1)其实没有什么区别了,因为我们新建这张表时已经建好了主键,mysql和大多数的数据库引擎一样会做一些优化,它会去根据主键索引来统计。

以上的语句结果当然都是2。下面分析这两句话的执行过程:

 


explain  select   count ( * )  from  Table1
explain  select   count ( * )  from  Table2


得到的执行计划分别如下:

第一句:

+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
| 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  | 
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+



第二句:

+----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table  | type  | possible_keys | key     | key_len | ref  | rows | Extra       |
+----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+
|  1 | SIMPLE      | Table2 | index | NULL          | PRIMARY | 4       | NULL |    3 |  Using index  | 
+----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+


Table1是MyISAM类型的表,统计行数时它已经是最优的语句了( Select tables optimized away ,表示已经不能再优化了,一些资料上说MyISAM类型的表将Rows存在一个地方,查询时直接使用即可。)。Table2是InnoDB类型的表,统计行数时它将使用聚集索引进行统计。