mysql的存储引擎


1.存储引擎的概念

  

   当一个大型的系统存在性能瓶颈是,我们采用分库处理时多存储引擎的优势就发挥出来了。

 

2.查看存储引擎

  查询所有的引擎:

    show engines;

 

  当前使用的引擎:

     show variables like '%storage_engine%'

 

3.MYISAM与InnoDB的区别

  

  

 

二:详细说明

1.myIsam

  不支持事务
  表级锁定
  读写相互阻塞,写入不能读,读时不能写
  只缓存索引
  不支持外键约束
  不支持聚簇索引
  读取数据较快,占用资源较少
  不支持MVCC(多版本并发控制机制)高并发
  崩溃恢复性较差
  MySQL5.5.5前默认的数据库引擎
 
  

  使用这个存储引擎,每个MyISAM在磁盘上存储成三个文件。

  (1)frm文件:存储表的定义数据

  (2)MYD文件:存放表具体记录的数据

  (3)MYI文件:存储索引

  frm和MYI可以存放在不同的目录下。MYI文件用来存储索引,但仅保存记录所在页的指针,索引的结构是B+树结构。

 

2.innodb

  对Innodb的特点做以下总结;

  更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。

  事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。

  自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。

  外键约束。MySQL支持外键的存储引擎只有InnoDB。

  支持自动增加列AUTO_INCREMENT属性。

  支持行级锁。

  具有非常高效的缓存特性:能缓存索引,也能缓存数据。

  支持分区,表空间,类似oracle数据库。

  读写阻塞与事务隔离级别相关

  支持聚簇索引

  支持MVCC高并发
  从MySQL5.5后支持全文索引

 

  innodb_file_per_table  on:表示独立表空间,OFF:表示系统表空间。5.6之前是系统表空间,之后为独立表空间。

  

 

 

 

3.memory

  将数据存在内存,为了提高数据的访问速度,每一个表实际上和一个磁盘文件关联。文件是frm。

  (1)支持的数据类型有限制,比如:不支持TEXT和BLOB类型,对于字符串类型的数据,只支持固定长度的行,VARCHAR会被自动存储为CHAR类型;

  (2)支持的锁粒度为表级锁。所以,在访问量比较大时,表级锁会成为MEMORY存储引擎的瓶颈;

  (3)由于数据是存放在内存中,一旦服务器出现故障,数据都会丢失;

  (4)查询的时候,如果有用到临时表,而且临时表中有BLOB,TEXT类型的字段,那么这个临时表就会转化为MyISAM类型的表,性能会急剧降低;

  (5)默认使用hash索引。

  (6)如果一个内部表很大,会转化为磁盘表。

 

4.csc  

  数据以文本方式存储,表的字段不能为空,不能有主键。

  .frm , .csv数据的内容, .csm存储表的元数据 。

  使用文本编辑器可以直接编辑.csv数据,然后保存,在数据库里面执行flush  tables;

  要在最后一行数据回车一下,要不然最后一条数据不展示。

  特点:

    以CSV格式进行数据存储,所有列的字段都不能为null,不支持索引,可以对数据文件在线编辑。

 

5.archive

  以zlib对表数据进行压缩,磁盘I/O更少,数据存储在.ARZ。

  .frm , .ARZ数据的内容。

  特点:

    只支持insert和select操作,只允许在自增ID列上加索引。

  使用场景:

    日志和数据采集应用

 

6.Federated

  访问远程的数据库表,本地只保存数据库结构和连接信息,数据保存在远程的服务器中。在本地只保存.frm

  默认不是开启的引擎,在my.ini  增加 federated=1,重启。

  

  只能用命令创建。create table ‘aaa’(里面的字段,要和连接的服务器一样) engine=federated connection='mysql://用户名:密码@地址:IP/数据库名/表名'

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM