`
jiangzhenghua
  • 浏览: 601062 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

详解Mysql中InnoDB和MyISAM两种表类型的区别

 
阅读更多

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

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

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

CREATE TABLE
  `Table2` (
  `id` 
int(11NOT NULL
,
  `name` 
char(50character 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 |
+----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+

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

分享到:
评论

相关推荐

    MySQL Innodb 索引原理详解

    ### MySQL Innodb 索引原理详解 #### 1. 各种树形结构 在深入探讨MySQL Innodb索引之前,我们先了解几种基本的树形数据结构,包括二叉搜索树、B树、B+树以及B*树。 ##### 1.1 搜索二叉树(Binary Search Tree) ...

    MySQL存储引擎中MyISAM和InnoDB区别详解

    InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度...

    MySQL存储引擎中的MyISAM和InnoDB区别详解

    在使用MySQL的过程中对MyISAM和InnoDB这两个概念存在了些疑问,到底两者引擎有何分别一直是存在我心中的疑问。为了解开这个谜题,搜寻了网络,找到了如下信息: MyISAM是MySQL的默认数据库引擎(5.5版之前),由...

    myisam和innodb的区别

    InnoDB和MyISAM是MySQL中最常见的两种存储引擎,它们各自具有独特的特性和适用场景。InnoDB因其全面的事务支持、行级锁定和MVCC机制而更适合于需要高度一致性和并发性能的场合;而MyISAM由于其简单的结构和高效的...

    MySql Innodb 引擎特性详解

    ### MySQL Innodb 引擎特性详解 #### 一、MySQL Innodb 引擎概述 MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它提供了多种存储引擎以满足不同场景的需求。其中,InnoDB是最常用的一种存储引擎之一,...

    mySql 存储引擎 启用 Innodb

    ### MySQL存储引擎启用InnoDB详解 #### 一、引言 在MySQL数据库系统中,存储引擎扮演着极其重要的角色,它决定了数据如何被存储、检索和管理。其中,InnoDB作为MySQL中最常用的存储引擎之一,提供了众多高级特性,...

    InnerDB和MyISAM引擎的区别最详解

    从InnoDB 和MyISAM 的概念、特性、优缺点、数据分布等方面,全面剖析“Mysql 中 MyISAM 和 InnoDB 的区别有哪些

    Mysql面试题详解(个人整理)

    - **存储结构**:InnoDB的数据和索引一起存储,MYISAM分开存储,InnoDB更利于大表操作。 3. **其他知识点**: - **MVCC(多版本并发控制)**:InnoDB支持MVCC,提高了并发读写的能力,而MYISAM不支持。 - **全文...

    Mysql数据库从入门到精通.rar

    4.MySQL的数据类型和建库策略详解 5.MySQL多表操作和备份处理 6.MySQL索引分类和各自用途 7.MySQL中的字符串比较函数 8.MySQL中字符串函数详细介绍 9.都出深入SELECT语句的查询功能 10.浅谈MySQL存储引擎选择InnoDB...

    史上最详细的一线大厂Mysql面试题详解.pdf

    MyISAM 和 InnoDB 是 MySQL 中两种常见的存储引擎,它们之间有许多区别: 1. 事务支持:InnoDB 支持事务,而 MyISAM 不支持事务。 2. 锁机制:InnoDB 支持行级锁,而 MyISAM 支持表级锁。 3. MVCC:InnoDB 支持多...

    一线大厂Mysql面试题详解.pdf

    InnoDB与MyISAM是MySQL中两种常见的存储引擎。它们之间的主要区别包括: * InnoDB支持事务,而MyISAM不支持事务。 * InnoDB支持行级锁,而MyISAM支持表级锁。 * InnoDB支持MVCC,而MyISAM不支持。 * InnoDB支持外键...

    Mysql临时表和派生表

    MySQL中的临时表是一种特殊的表类型,主要用于存储临时数据或中间结果集,适用于那些需要多次查询同一结果集的场景。根据存储位置的不同,可以将临时表分为两类:内存临时表和外存临时表。 - **内存临时表(in-...

    Mysql面试题详解MySQL常见面试题汇总(建议收藏!!!)

    1. MySQL 中的 varchar 和 char 的区别:varchar 和 char 都是字符串类型,但 varchar 可以存储变长字符串,而 char 只能存储固定长度的字符串。 2. varchar(10) 和 int(10) 代表什么含义?:varchar(10) 代表字符串...

    Mysql InnoDB引擎的索引与存储结构详解

    在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。 而MySql数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的...

    SQLServer和MySql语法和关键字的区别详解

    1. **枚举与集合类型**: MySQL 支持 `enum` 和 `set` 类型,这些类型允许用户定义一组固定的选择项,而 SQLServer 不支持这两种类型。 2. **字符类型**: SQLServer 支持 `nchar`, `nvarchar`, 和 `ntext` 这些 ...

    MySQL 62 道面试题及答案.docx

    MySQL 中有五种类型的表格:MyISAM、Heap、Merge、InnoDB 和 JSAM。每种表格类型都有其特点和应用场景。 MySQL 存储引擎 MySQL 中有两种存储引擎:MyISAM 和 InnoDB。MyISAM 不支持事务,但是每次查询都是原子的;...

    mysql常见面试题及答案

    2. MySQL 中的主键和候选键的区别在于,主键是唯一标识表中的每一行,而候选键可以被指定为主键。 3. myisamchk 是 MySQL 中的一个工具,用于压缩 MyISAM 表。 MySQL 面试题及答案涵盖了 MySQL 的基本概念、存储...

Global site tag (gtag.js) - Google Analytics