Miss 带你了解 MySQL存储引擎
存储引擎其实就是如何存储数据,如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据是以表的形式存储的,所以存储引擎也可以成为表类型。在oracle和sqlserver等数据库中只有一种存储引擎,所以数据存储管理机制都是一样的;而MySQL数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据需要编写自己的存储引擎。
mysql存储引擎的概念
MySQL中的数据用各种不同的技术存储在文件中,这些技术中的每一项技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的、不同的功能和能力。这些不同的技术以及配套的相关功能在MySQL中被称为存储引擎,可以预先设置或者在MySQL服务武器中启动。
查询MySQL中支持的存储引擎
查询支持的全部存储引擎。
SHOW ENGINES
当使用 show engines G;时
show engines G;
从查询结果可以看出,MySQL支持多个存储引擎,其中InnoDB为默认存储引擎。
查询默认的存储引擎
MYSQL有多个可用的存储引擎,下面主要介绍InnoDB、MyISAM、MEMORY3种存储引擎
InnoDB
InnoDB已经开发了十余年,遵循GNU通用公开许可(GPL)发行。已经被很多大型公司采用。InnoDB给MySQL提供了事务、回滚、崩溃修复能力和多版本并发控制的事务安全。InnoDB是MySQL上第一个提供外键约束的表引擎,而且InnoDB的事务处理能力也是MySQL其他存储引擎无法比拟的。
支持ACID事务,支持行级锁定。事务处理即原子性。
行级锁定(你执行update语句是,只会将这一条记录进行锁定,只有针对这条记录的其他写入、更新操作会被阻塞并等待这条update语句执行完毕后再执行,针对其他记录的写入操作不会有影响。)
为处理巨大数据量时的最大性能设计。
InnoDB存储引擎完全与MySQL服务器整合。
InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)。
innodb通过使用MVCC来获取高并发性,并且实现sql标准的4种隔离级别,同时使用一种被称成next-key locking的策略来避免换读(phantom)现象。除此之外innodb引擎还提供了插入缓存(insert buffer)、二次写(double write)、自适应哈西索引(adaptive hash index)、预读(read ahead)等高性能技术。
在技术上,InnoDB 是一套放在 MySQL后台的完整数据库系统,InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。
MyISAM
MyISAM不支持事务
MyISAM只支持表级锁,所以不会出现死锁的问题。主要用于高负载的select。
表级锁(直接锁定整张表,在锁定期间,其他进程无法对该表进行写操作,如果设置的是写锁,那么其他进程读也不允许)
MyISAM引擎不支持外键
MyISAM引擎的表在大量高并发的读写下会经常出现表损坏的情况
对于count()查询来说MyISAM更有优势
因为MyISAM存储了表中的行数记录,执行SELECT COUNT() 的时候可以直接获取到结果,而InnoDB需要扫描全部数据后得到结果。
但是注意一点:对于带有WHERE 条件的 SELECT COUNT()语句两种引擎的表执行过程是一样的,都需要扫描全部数据后得到结果
InnoDB是为处理巨大数据量时的最大性能设计,它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。
MyISAM支持全文索引(FULLTEXT),InnoDB不支持
MyISAM引擎的表的查询、更新、插入的效率要比InnoDB高
因此,当你的数据库有大量的写入、更新操作而查询比较少或者数据完整性要求比较高的时候就选择InnoDB表。当你的数据库主要以查询为主,相比较而言更新和写入比较少,并且业务方面数据完整性要求不那么严格,就选择MyISAM表。因为MyISAM表的查询操作效率和速度都比InnoDB要快
MEMORY
memory存储引擎相比前面的一些存储引擎,有点不一样,其使用存储在内从中的数据来创建表,而且所有的数据也都存储在内存中。
每个基于memory存储引擎的表实际对应一个磁盘文件,该文件的文件名和表名是相同的,类型为.frm。该文件只存储表的结构,而其数据文件,都是存储在内存中,这样有利于对数据的快速处理,提高整个表的处理能力。
memory存储引擎默认使用哈希(HASH)索引,其速度比使用B-+Tree型要快,如果读者希望使用B树型,则在创建的时候可以引用。
memory存储引擎文件数据都存储在内存中,如果mysqld进程发生异常,重启或关闭机器这些数据都会消失。所以memory存储引擎中的表的生命周期很短,一般只使用一次。
- 上一篇:没有了
- 下一篇:没有了