对于如何选择存储引擎,可以简答的归纳为一句话:“除非需要用到某些INNODB 不具备的特性,并且没有其他办法可以替代,否则都应该选择INNODB 引擎”。例如:如果要用到全文索引,建议优先考虑INNODB加上Sphinx的组合,而不是使用支持全文索引的myisam。当然,如果不需要用到InnoDB的特性,同时其他引擎的特性能够更好的满足需求,也可以考虑一下其他存储引擎。举个例子,如果不在乎可扩展能力和并发能力,也不在乎崩溃后的数据丢失问题,却对InnoDB的空间占用比较敏感,这种场合下选择MyISAM就比较合适。

除非万不得已,否则建议不要混合使用多种存储引擎,否则可能带来一系列负责的问题,以及一些潜在的bug和边界问题。存储引擎层和服务器层的交互已经比较复杂,更不用说混合多个存储引擎了。至少,混合存储引擎对一致性备份和服务器参数配置都带来了一定的困难。

如果应用需要不同的存储引擎,请先考虑以下几个因素:

事务

如果应用中需要事务支持,那么InnoDB(或者XtraDB)是目前最稳定,并且经验证的选择。如果不需要事务,并且主要是SELECT 和 INSERT 操作,那么myisam是不错  的选择。一般日志型的应用比较符合这一特性。

备份

备份的需求也会影响到存储引擎的选择。如果可以定期的关闭服务器来执行备份,那么备份的因素可以忽略。反之,如果需要在线热备份,那么选择InnoDB就是基本的要   求。

崩溃恢复

数据量比较大的时候,系统崩溃后如何快速的恢复是一个需要考虑的问题。相对而言,Myisam 崩溃后发生损坏的概论比INNODB 要高很多,而且恢复速度也很慢。因此,  即使不需要事务支持,很多人也选择INNODB 引擎,这也是一个非常重要的因素。

特有的特性

最后,有些应用可能依赖一些存储引擎独有的特性或者优化,比如很多应用依赖聚簇索引的优化。另外mysql 中也只有myisam 支持地理空间搜索。如果一个存储引擎拥有  一些关键的特性,同时又缺乏一些必要的特性,那么有时候不得不做折中的考虑,或者在架构设计上做一些取舍。某些存储引擎无法直接支持的特性,有时候通过变通也可以满足需求。

原文:http://www.cnblogs.com/zhengyanqiu/p/4970457.html

mysql中什么是选择引擎_Mysql 应该选择什么引擎相关推荐

  1. mysql中需要提交的操作_MySQL常用操作及基础知识

    原标题:MySQL常用操作及基础知识 1.启动和关闭mysql服务器: service mysql start service mysql stop 2.重启MySQL服务: service mysq ...

  2. mysql中engine是什么意思_mysql中engine=innodb和engine=myisam的区别

    最开始用MySQL Administrator建数据库的时候,表缺省是InnoDB类型,也就没有在意.后来用Access2MySQL导数据的时候发现只能导成 MyISAM类型的表,不知道这两种类型有什 ...

  3. mysql中怎么表示100美元_MySQL 事物,美国服务器

    在理解事物之前,接触数据库系统的其他高级特性还言之过早.事物就是一组原子性的SQL查询,或者说一个独立的工作单元.如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询.如果其中有 ...

  4. mysql中distinct走索引吗_MySQL中索引优化distinct语句及distinct的多字段操作

    MySQL通常使用GROUPBY(本质上是排序动作)完成DISTINCT操作,如果DISTINCT操作和ORDERBY操作组合使用,通常会用到临时表.这样会影响性能. 在一些情况下,MySQL可以使用 ...

  5. mysql支持数据安全的引擎_MySQL 支持的存储引擎

    存储引擎: 数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建.查询.更新和删除数据操作. 不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎还可以获得 ...

  6. mysql中gender要用什么类型,如何选择合适的MySQL数据类型

    一.MySQL数据类型选择原则 更小的通常更好:一般情况下选择可以正确存储数据的最小数据类型.越小的数据类型通常更快,占用磁盘,内存和CPU缓存更小. 简单就好:简单的数据类型的操作通常需要更少的CP ...

  7. 在mysql中怎样设置值唯一_mysql怎么设置行值唯一?

    mysql可通过给行(字段)添加唯一性约束来设置行值唯一,语法格式"CREATE TABLE 表名 (字段名 数据类型 UNIQUE);"和"ALTER TABLE 表名 ...

  8. mysql中如何删除空记录表_mysql删除表中的记录

    大家都知道,在MySQL中删除一个表中的记录有两种方法,一种是DELETE FROM TABLENAME WHERE... , 还有一种是TRUNCATE TABLE TABLENAME. DELET ...

  9. mysql中更新的命令是_MySQL 语言中,更新表数据的命令是( )。_学小易找答案

    [简答题]MySQL 语言中包含数都定义语言.数据操纵语言和数据控制语言,分别有哪些功能? [单选题]查询员工工资信息时,结果按工资降序排列,正确的是( ). [简答题]arrayList测验 [填空 ...

最新文章

  1. android 字幕,Android中的字幕文本
  2. C#使用sqlite的遇到的问题
  3. Illegal access:this web application instance has been stopped already
  4. 字符串和整形、浮点类型的相互转化
  5. boost::gil::promote_integral用法的测试程序
  6. laravel常用命令整理
  7. 通过demo搞懂encode_utf8和decode_utf8
  8. 进阶之路(基础篇) - 009 通过底层AVR方法实现SPI数据传输
  9. 勒索软件的激荡三十年
  10. UE4官方文档UI学习:1.UMG UI设计器快速入门
  11. 【译】网页像素追踪原理
  12. android 自定义锁屏
  13. 初为人师[/size]
  14. 人工智能技术助力民族语言保护大有可为
  15. 奥巴马,别让底特律变成你的越南
  16. 第844期机器学习日报(2017-01-09)
  17. 2021-04-24 - 电脑主板 - 升级Blos和ME - 学习/实践
  18. 视频增强,去雾的实现 BU6521KV
  19. java 常用类 - 大数据运算
  20. Java --- Xstream使用

热门文章

  1. 返回值 包装类_(九)Java常用类
  2. linux系统下常用的打包/解压缩包命令
  3. P3512 [POI2010]PIL-Pilots(单调队列+二分)
  4. 字符串的索引 切片 步长 反步长 , 字符串的常用方法 格式化输出
  5. 关于未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值的解决方法...
  6. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
  7. Selenium 中文手册
  8. Vue中vue-router路由使用分析
  9. flutter中使用InkWell给任意Widget添加点击事件
  10. 使用Pycharm开发WordCount程序