众所周知,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
然后随机的往这两张表中插入一些记录,比如都插入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类型的表,统计行数时它将使用聚集索引进行统计。
分享到:
相关推荐
### MySQL Innodb 索引原理详解 #### 1. 各种树形结构 在深入探讨MySQL Innodb索引之前,我们先了解几种基本的树形数据结构,包括二叉搜索树、B树、B+树以及B*树。 ##### 1.1 搜索二叉树(Binary Search Tree) ...
InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度...
在使用MySQL的过程中对MyISAM和InnoDB这两个概念存在了些疑问,到底两者引擎有何分别一直是存在我心中的疑问。为了解开这个谜题,搜寻了网络,找到了如下信息: MyISAM是MySQL的默认数据库引擎(5.5版之前),由...
InnoDB和MyISAM是MySQL中最常见的两种存储引擎,它们各自具有独特的特性和适用场景。InnoDB因其全面的事务支持、行级锁定和MVCC机制而更适合于需要高度一致性和并发性能的场合;而MyISAM由于其简单的结构和高效的...
### MySQL Innodb 引擎特性详解 #### 一、MySQL Innodb 引擎概述 MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它提供了多种存储引擎以满足不同场景的需求。其中,InnoDB是最常用的一种存储引擎之一,...
### MySQL存储引擎启用InnoDB详解 #### 一、引言 在MySQL数据库系统中,存储引擎扮演着极其重要的角色,它决定了数据如何被存储、检索和管理。其中,InnoDB作为MySQL中最常用的存储引擎之一,提供了众多高级特性,...
从InnoDB 和MyISAM 的概念、特性、优缺点、数据分布等方面,全面剖析“Mysql 中 MyISAM 和 InnoDB 的区别有哪些
- **存储结构**:InnoDB的数据和索引一起存储,MYISAM分开存储,InnoDB更利于大表操作。 3. **其他知识点**: - **MVCC(多版本并发控制)**:InnoDB支持MVCC,提高了并发读写的能力,而MYISAM不支持。 - **全文...
4.MySQL的数据类型和建库策略详解 5.MySQL多表操作和备份处理 6.MySQL索引分类和各自用途 7.MySQL中的字符串比较函数 8.MySQL中字符串函数详细介绍 9.都出深入SELECT语句的查询功能 10.浅谈MySQL存储引擎选择InnoDB...
MyISAM 和 InnoDB 是 MySQL 中两种常见的存储引擎,它们之间有许多区别: 1. 事务支持:InnoDB 支持事务,而 MyISAM 不支持事务。 2. 锁机制:InnoDB 支持行级锁,而 MyISAM 支持表级锁。 3. MVCC:InnoDB 支持多...
InnoDB与MyISAM是MySQL中两种常见的存储引擎。它们之间的主要区别包括: * InnoDB支持事务,而MyISAM不支持事务。 * InnoDB支持行级锁,而MyISAM支持表级锁。 * InnoDB支持MVCC,而MyISAM不支持。 * InnoDB支持外键...
MySQL中的临时表是一种特殊的表类型,主要用于存储临时数据或中间结果集,适用于那些需要多次查询同一结果集的场景。根据存储位置的不同,可以将临时表分为两类:内存临时表和外存临时表。 - **内存临时表(in-...
1. MySQL 中的 varchar 和 char 的区别:varchar 和 char 都是字符串类型,但 varchar 可以存储变长字符串,而 char 只能存储固定长度的字符串。 2. varchar(10) 和 int(10) 代表什么含义?:varchar(10) 代表字符串...
在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。 而MySql数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的...
1. **枚举与集合类型**: MySQL 支持 `enum` 和 `set` 类型,这些类型允许用户定义一组固定的选择项,而 SQLServer 不支持这两种类型。 2. **字符类型**: SQLServer 支持 `nchar`, `nvarchar`, 和 `ntext` 这些 ...
MySQL 中有五种类型的表格:MyISAM、Heap、Merge、InnoDB 和 JSAM。每种表格类型都有其特点和应用场景。 MySQL 存储引擎 MySQL 中有两种存储引擎:MyISAM 和 InnoDB。MyISAM 不支持事务,但是每次查询都是原子的;...
具体讨论了MySQL的各种存储引擎,特别是InnoDB和MyISAM的特点及其适用场景。此外,文档还探讨了MySQL的查询流程、缓存机制、索引优化策略、常见的JOIN查询类型,以及如何解决性能瓶颈等问题。 适合人群:具有MySQL...
2. MySQL 中的主键和候选键的区别在于,主键是唯一标识表中的每一行,而候选键可以被指定为主键。 3. myisamchk 是 MySQL 中的一个工具,用于压缩 MyISAM 表。 MySQL 面试题及答案涵盖了 MySQL 的基本概念、存储...