#什么事MySQL数据库? 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合。 我们常说的MySQL数据库,sql server数据库等其实是数据库管理系统,它们可以存储数据,并提供查询和更新数据库中的数据的功能等等。根据数据库如何存储数据和如何操作数据的实现机制不同,这些数据库之间既有区别又有共同点。 MySQL数据库是开放源代码的关系型数据库。目前,它提供的功能有:支持sql语言、子查询、存储过程、触发器、视图、索引、事务、锁、外键约束和影像复制等。 同oracle和sql server等大型数据库系统一样,MySQL也是客户/服务器西宫,并且是单进程多线程架构的数据库。 MySQL的区别在于其它的数据库系统的一个重要特点是支持插入式存储引擎。
那么什么是存储引擎呢?
存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系型数据库中,数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。 在oracle和sql server等数据库中,只有一种存储引擎,所有的数据存储管理机制都是一样的。而MySQL数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。 #MySQL有哪些存储引擎? 进入MySQL的客户端时,执行命令 show engines,既可以看到MySQL支持的存储引擎类型. 如下图:
修改默认存储引擎:
在配置文件your_path/my.cnf中设置如下:
default_storage_engine = InnoDB
详解几种常用的MySQL存储引擎类型:
MyISAM
支持全文索引
支持压缩:用于实现数据仓库,能节约存储空间并提升性能
支持空间索引
支持表级锁:若读写操作比例为9:1或8:2,则使用MyISAM可以提高性能
延迟更新索引:减少IO压力
不支持事务,外键,MVCC,行级锁等
崩溃后无法安全恢复数据
适用场景:多读少写的数据,较小的表,能够容忍崩溃后的修改操作和数据丢失; 如自带的mysql数据库中的表都是使用MyISAM存储引擎的
建议:使用InnoDB存储引擎,并使用read commited的隔离级别,性能并不比MyISAM性能差,故推荐使用InnoDB存储引擎
InnoDB
支持事务:事务日志;日志文件大小一致:如ib_logfile0和ib_logfile1
支持外键
支持MVCC
支持聚簇索引
支持行级锁:即间隙锁
支持辅助索引
支持自适应hash索引
支持热备份
不支持全文索引
ARCHIVE
仅支持insert和select
支持很好的压缩功能
不支持事务,不能很好的支持索引
适用于:存储日志信息,或其它按时间序列实现的数据采集类的应用,如监控日志
CSV
将数据存储为csv格式,不支持索引
仅适用于数据交换场景
BLACKHOLE
没有存储机制,任何发往此引擎的数据都会丢弃
由于其会记录二进制日志,故常用于多级复制架构中作中转服务器
MEMORY
数据保存在内存中,即是一个内存表
仅支持hash索引,使用表级锁
不支持blob和text数据类型
常用于保存中间数据,如周期性的聚合数据等;也用于实现临时表
MRG_MYISAM
是MyISAM的一个变种,能够将多个MyISAM表合并为一个虚表
属于传统的存储引擎,一般不常用
存储引擎的一些问题
1.如何查看服务器有哪些存储引擎可以使用?
为确定你的MySQL服务器可以用哪些存储引擎,执行如下命令: show engines;
2.如何选择合适的存储引擎?
选择标准可以分为:
(1)是否需要支持事务;
(2)是否需要使用热备;
(3)崩溃恢复:能否接受崩溃;
(4)是否需要外键支持;
然后按照标准,选择对应的存储引擎即可。