首页 > 数据库技术 > 详细

MySQL数据库存储引擎

时间:2019-03-24 12:24:15      阅读:174      评论:0      收藏:0      [点我收藏+]

何谓存储引擎 :

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中都使用着不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,能够各自在不同方面提高对数据增删改查操作的效率,从而改善你的应用整体功能。

 

这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。MySQL默认配置了许多不同的存储引擎,可以预先设置或者在MySQL服务器中启用。在项目中可根据需求选择适用于服务器、数据库和表格的存储引擎,以便在对数据进行增删改查时提供最大的灵活性。

 

修改数据库引擎 : 

show variables like "default_tmp_storage_engine"; ||   show engines;  查看数据库使用的默认存储引擎

方式一 : 修改mysql配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf

    [mysqld]后面添加 default-storage-engine=InnoDB

     重启mysql服务

方式二 : 建表时指定数据库引擎

      create table mytbl( id int primary key, name varchar(50) )type=MyISAM;  

方式三 : 建表后更改数据库引擎

      alter table table_name type = InnoDB;

查看数据库引擎是否更改成功: show table status from table_name;   ||  show create table table_name;

 

储存引擎分类 :

MyISAM
特点:不支持事务,也不支持行级锁和外键

   引擎在创建表的时候,会创建三个文件,一个是.frm文件用于存储表的定义,一个是.MYD文件用于存储表的数据,另一个是.MYI文件,存储的是索引。

   MyISAM索引用的 B+ tree索引结构 来储存数据,MyISAM索引的指针指向的是键值的地址,地址存储的是数据。索引和实际数据是分开存储的,不过是用索引指向了实际的数据(非聚集索引).

   还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。

优势:拥有较高的插入、查询速度,访问速度快

劣势: 由于不支持事务操作,当表损坏后无法自动恢复

   解决: mysql下的bin目录中有mysqlcheck.exe是专门修复myisam表损坏的,命令行执行,mysqlcheck -r database tablename -uroot -ppassword -h127.0.0.1 -P3306
使用场景:

  • 选择密集型的表。MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点。
  • 插入密集型的表。MyISAM的并发插入特性允许同时选择和插入数据。例如:MyISAM存储引擎很适合管理邮件或Web服务器日志数据。
  • 对事务完整性没有要求,即不需要支持事务和支持外键的表设计,但是并不代表有事务操作的项目不能用MyIsam存储引擎,可以在service层进行根据自己的业务需求进行相应的控制。

  •  

    需要 对表进行加锁的场景。

  • 需要使用到大量查询数据select、插入数据insert为主的应用
  • 需要做很多count的计算的。如一些日志,调查的业务表。

 

InnoDB
特点:具有提交、回滚和崩溃恢复能力的事务安全,支持行级锁和外键约束

   MyISAM一样也是使用 B+tree索引结构,但InnoDB的索引文件本身就是数据文件,即B+Tree的数据域存储的就是实际的数据(聚集索引)
缺点:写的处理效率差,占用更多的磁盘空间以保留数据和索引。

使用场景:

  • 更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。
  • 要求可靠性高和支持事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。
  • 自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。
  • 需要支持外键约束。MySQL支持外键的存储引擎只有InnoDB
  • 支持自动增加列AUTO_INCREMENT属性。
  • 一般来说,如果需要事务支持,并且有较高的并发读取频率,InnoDB是不错的选择。

 

 

 

MEMORY(HEAP)

特点:使用内存中的内容来创建表,每个MEMORY表只实际对应一个磁盘文件,访问速度非常快,默认使用hash索引
缺点:服务一旦关闭,表中的数据就会丢失掉

使用场景:

  • 那些内容变化不频繁的代码表,或者作为统计操作的中间结果表,便于高效地堆中间结果进行分析并得到最终的统计结果。
  • 目标数据比较小,而且非常频繁的进行访问,在内存中存放数据,如果太大的数据会造成内存溢出。可以通过参数max_heap_table_size控制Memory表的大小,限制Memory表的最大的大小。
  • 数据是临时的,而且必须立即可用得到,那么就可以放在内存中(服务器日志)。

存储数据特性:要求存储的数据是数据长度不变的格式,比如,Blob和Text类型的数据不可用(长度不固定的)。

 

注意: Memory同时支持散列索引和B树索引,B树索引可以使用部分查询和通配查询,也可以使用<,>和>=等操作符,散列索引相等的比较快,但是对于范围查询比较慢。

 

MyISAMInnoDB之比较 :

 

  • InnoDB可借助事务日志(Transaction Log)来恢复程序崩溃(crash),或者非预期结束所造成的数据错误;而MyISAM遇到错误,必须完整扫描后才能重建索引,或者修正未写入硬盘的错误。
  • InnoDB的修复时间,大略都是固定的,但MyISAM的修复时间,则与数据量的多少成正比。相对而言,随着数据量的增加,InnoDB会有较佳的稳定性。
  • MyISAM必须依靠操作系统来管理读取&写入的缓存,而InnoDB是有自己的读写缓存管理机制。InnoDB不会将被修改的数据立即交给操作系统,在某些情况,InnoDB的数据访问会比MyISAM更高效率。
  • InnoDB支持事务&行级锁&外键&全文索引,而MyISAM不支持事务&行级锁&外键&全文索引

 

技术分享图片

MySQL数据库存储引擎

原文:https://www.cnblogs.com/hsmwlyl/p/10587573.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!