mysql存储引擎区别有哪些
MySQL中存储引擎的区别:以Innodb和myisam为例,前者支持事务而后者不支持;前者强调多功能性,支持的拓展功能比较多,后者主要侧重于性能;前者不支持全文索引,而后者支持全文索引等mysql支持存储引擎有好几种,咱们这里主要讨论一下常用的几种存储引擎。Innodb,myisamINNODBINNODB索引实现与 MyISAM相同的一点是,InnoDB 也采用 B+Tree这种数据结构来实现 B-Tree索引。而很大的区别在于,InnoDB 存储引擎采用“聚集索引”的数据存储方式实现B-Tree索引,所谓“聚集”,就是指数据行和相邻的键值紧凑地存储在一起,注意 InnoDB 只能聚集一个叶子页(16K)的记录(即聚集索引满足一定的范围的记录),因此包含相邻键值的记录可能会相距甚远。在 InnoDB 中,表被称为 索引组织表(index organized table),InnoDB 按照主键构造一颗 B+Tree (如果没有主键,则会选择一个唯一的并且非空索引替代,如果没有这样的索引,InnoDB则会隐式地定义一个主键来作为聚集索引),同时叶子页中存放整张表的行记录数据,也可以将聚集索引的叶子节点称为数据页,非叶子页可以看做是叶子页的稀疏索引。下图说明了 InnoDB聚集索引的实现方式,同时也体现了一张 innoDB表的结构,可以看到,InnoDB 中,主键索引和数据是一体的,没有分开。这种实现方式,给予了 InnoDB 按主键检索的超高性能。可以有目的性地选择聚集索引,比如一个邮件表,可以选择用户ID来聚集数据,这样只需要从磁盘读取较少并且连续的数据页就能获得某个id的用户全部的邮件,避免了读取分散页时所耗费的随机I/O。InnoDB 则是 I/O 操作,Innodb读写采用MVCC来支持高并发。全表扫描当InnoDB做全表扫描时并不高效,因为 InnoDB 实际上并没有顺序读取,在大多情况下是在随机读取。做全表扫描时,InnoDB 会按主键顺序扫描页面和行。这应用于所有的InnoDB 表,包括碎片化的表。如果主键页表没有碎片(存储主键和行的页表),全表扫描是相当快,因为读取顺序接近物理存储顺序。但是当主键页有碎片时,该扫描就会变得十分缓慢行级锁提供行锁(locking on row level),提供与 Oracle 类型一致的不加锁读取(non-locking read in SELECTs),另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”MYISAMMyISAM索引的实现每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。MyISAM索引文件【.MYI (MYIndex)】和数据文件【.MYD (MYData)】是分离的,索引文件仅保存记录所在页的指针(物理位置),通过这些地址来读取页,进而读取被索引的行。先来看看结构图 上图很好地说明了树中叶子保存的是对应行的物理位置。通过该值,存储引擎能顺利地进行回表查询,得到一行完整记录。同时,每个叶子页也保存了指向下一个叶子页的指针。从而方便叶子节点的范围遍历。 而对于二级索引,在 MyISAM存储引擎中以与上图同样的方式实现,这也说明了 MyISAM的索引方式是“非聚集的”,与 Innodb的“聚集索引”形成了对比MyISAM 默认会把索引读入内存,直接在内存中操作;表级锁小结:Innodb强调多功能性,支持的拓展功能比较多,myisam主要侧重于性能区别1、InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;2、InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。3、InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;4、Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高;
如何查看mysql数据库表所使用的引擎(转载)
我们怎么样才能准确的查看mysql的存储引擎呢,下面我给大家介绍两种正确的方式。1)正确方式一: SHOW TABLE STATUS from 数据库库名 where Name=‘表名‘2)mysqlshow -u 数据库登录帐号 -p有时的时候,我们想查看以下mysql的表的存储引擎是什么类型的,不用说,大家直接想到的就是使用show create table命令查看创建表的命令,从而直接认为定义表的引擎就是表的真正存储引擎,这个方法在大多数情况下是没有错的,但是在有的时候却是致命的错误,因为有的时候明明看的的是 engine =myisam ,怎么会select count(*) from tbl_name 的查询速度怎么会真么慢呢。这种情况一般会出现在使用该创建表的存储没有安装成功,从而导致表使用的时数据库的默认存储引擎。因此严格的来说查看mysql的表的存储引擎使用show create table命令是不完全正确的。正确的方式是使用下面我介绍的两种方式,这两种方式查看出来的是没有任何问题的,还请大家仔细阅读下面的文章正确方式一: SHOW TABLE STATUS from 数据库库名 where Name=‘表名‘;01.hymin@Ubuntu:/myhome$mysql -uroot -p‘mypassword‘ 02.Welcome to the MySQL monitor. Commands end with ; or \g. 03.Your MySQL connection id is 221 04.Server version: 5.1.41-3ubuntu12.7 (Ubuntu) 05. 06.Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. 07. 08.mysql> SHOW TABLE STATUS from mytest where Name=‘test‘; 09.+------------+--------+---------+------------+------+----------------+-------------+(省略部分结果) 10.| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length |(省略部分结果) 11.+------------+--------+---------+------------+------+----------------+-------------+(省略部分结果) 12.| test | MyISAM | 10 | Fixed | 0 | 0 | 0 |(省略部分结果) 13.+------------+--------+---------+------------+------+----------------+-------------+(省略部分结果) 14.1 row in set (0.02 sec) 15. 16.mysql>5. 正确方式二: mysqlshow -u 数据库登录帐号 -p ‘数据库登录帐号密码‘ --status 数据库库名 表名1.hymin@Ubuntu:/myhome$mysqlshow -uroot -p‘mypassword‘ --status mytest test 2.Database:mytest Wildcard: test 3.+------------+--------+---------+------------+------+----------------+-------------+(省略部分结果) 4.| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length |(省略部分结果) 5.+------------+--------+---------+------------+------+----------------+-------------+(省略部分结果) 6.| test | MyISAM | 10 | Fixed | 0 | 0 | 0 |(省略部分结果) 7.+------------+--------+---------+------------+------+----------------+-------------+(省略部分结果)转载自:http://www.cnblogs.com/clouds008/archive/2013/06/10/3130680.html如何查看mysql数据库表所使用的引擎(转载)标签:
MySql数据库的常用存储引擎以及它们的区别?
MySQL 支持多种存储引擎,其中最常用的有 MyISAM、InnoDB 和 MEMORY 三种:
1. MyISAM:
- MyISAM 是 MySQL 最常用的存储引擎
- 它支持全文索引
- 支持表锁
- 支持热备份
- 但不支持事务
- 不支持外键
- 不支持行级锁
- 不支持并发控制
- 性能较高
- 适合查询量大、更新量小的应用场景
2. InnoDB:
- InnoDB 是 MySQL 的另一种存储引擎
- 它支持事务
- 支持外键
- 支持行级锁
- 支持并发控制
- 但不支持全文索引
- 不支持热备份
- 性能较低
- 适合查询量小、更新量大的应用场景
3. MEMORY:
- MEMORY 是 MySQL 的另一种存储引擎
- 它将数据存储在内存中,性能最高
- 但不支持事务
- 不支持外键
- 不支持行级锁
- 不支持并发控制
- 不支持热备份
- 适合查询量大、更新量小的应用场景【摘要】
MySql数据库的常用存储引擎以及它们的区别?【提问】
---**MySQL存储引擎**MySQL支持多种存储引擎,其中最常用的有三种:MyISAM、InnoDB和MEMORY。**MyISAM**- MyISAM是MySQL最常用的存储引擎。- 它支持全文索引。- 支持表锁。- 支持热备份。- 但不支持事务。- 不支持外键。- 不支持行级锁。- 不支持并发控制。- 性能较高,适合查询量大、更新量小的应用场景。**InnoDB**- InnoDB是MySQL的另一种存储引擎。- 它支持事务。- 支持外键。- 支持行级锁。- 支持并发控制。- 但不支持全文索引。- 不支持热备份。- 性能较低,适合查询量小、更新量大的应用场景。**MEMORY**- MEMORY是MySQL的另一种存储引擎。- 将数据存储在内存中,性能最高。- 但不支持事务。- 不支持外键。- 不支持行级锁。- 不支持并发控制。- 不支持热备份。- 适合查询量大、更新量小的应用场景。---【回答】