1. 14.1 Introduction to InnoDB
  2.  
  3. 14.1.1 InnoDB as the Default MySQL Storage Engine
  4. 14.1.2 Checking InnoDB Availability
  5. 14.1.3 Turning Off InnoDB
  6.  
  7. InnoDB 是一种通用的存储引擎,平衡高可用和高性能。
  8.  
  9. MySQL 5.6InnoDB 是默认的存储引起,执行CREATE TABLE 语句
  10.  
  11. 没有一个ENGINE= clause子句 会创建一个InnoDB表。
  12.  
  13. InnoDB的优势:
  14.  
  15. InnoDB表的优化包括:
  16.  
  17. 1.DML 操作遵循 ACID 模型, 有事务提交,回滚和crash-recovery能力来保护数据。
  18.  
  19. 2.行级锁和Oracle风格一致读增加多用户并发和性能
  20.  
  21. 3.InnoDB表安排在你的磁盘上优化基于主键
  22.  
  23. 4.维护数据完整性,InnoDB 也支持外键约束。 在启用外键约束下,
  24.  
  25. 插入,更新和删除被检查来确认 它们不会导致不一致在不同的表。
  26.  
  27. 5. 你可以自由地混合InnoDB表与其他的MySQL存储引擎,即使在相同的语句里。
  28.  
  29. 比如,你可以使用一个关联操作来组合InnoDBMEMORY 表在一个查询里。
  30.  
  31. 6. InnoDB 已经设计了CPU效率和最大性能当处理大量的数据:
  32.  
  33. Table 14.1 InnoDB Storage Engine Features
  34.  
  35. 存储限制 64TB
  36.  
  37. 事务 YES
  38.  
  39. 锁粒度 Row
  40.  
  41. MVCC Yes
  42.  
  43. 地理空间数据类型支持 Yes
  44.  
  45. Geospatial indexing support Yes
  46.  
  47. B-tree indexes
  48.  
  49. T-tree indexes
  50.  
  51. Hash indexes
  52.  
  53. InnoDB 存储引擎维护它自己的buffer pool用于caching 数据和indexes
  54.  
  55. 在主内存里。 默认的,innodb_file_per_table设置被启用,
  56.  
  57. 每个新的InnoDB 表和它的相关的索引是存储在一个单独的文件。
  58.  
  59. innodb_file_per_table option 被关闭,InnoDB 存储所有它的表和索引
  60.  
  61. 在一个单独的系统表空间,它可以有几个文件组成(或者一个raw disk 分区).
  62.  
  63. InnoDB 表可以处理大量的数据,即使在操作系统 文件大小被限制为2GB
  64.  
  65. 比较InnoDB的功能和其他的存储引擎,查看存储引擎特性 Chapter 15, Alternative
  66.  
  67. Storage Engines.
  68.  
  69. InnoDB的增强功能和新功能:
  70.  
  71. InoDB增强功能和新特性 MySQL 5.6 的信息:
  72.  
  73. 1.InnoDB 增强功能列表在 Section 1.4, What Is New in MySQL 5.6”,
  74.  
  75. 提供了在MySQL 5.6中添加的功能概要
  76.  
  77. Additional Resources 额外的资源:
  78.  
  79. 1.对于InnoDB-相关的术语和定义
  80.  
  81. 14.1.1 InnoDB as the Default MySQL Storage Engine InnoDB 默认的存储引擎:
  82.  
  83. InnoDB 是默认存储引擎在MySQL 5.6,
  84.  
  85. InnoDB 是一个事务安全(ACID 标准)存储引擎对于MySQL 已经提交,回滚和
  86.  
  87. crash-recovery 功能来保护用户的数据。
  88.  
  89. InnoDB 行级锁(没有升级到粗颗粒度的锁).
  90.  
  91. Oracle-风格的一致性非锁定读增加了多用户并发和性能。
  92.  
  93. InnoDB 存储用户的数据在clustered indexes来降低I/O对于基于主键的常见的查询
  94.  
  95. 为了维护数据的完整性,InnoDB 也支持外键约束
  96.  
  97. 除非你配置了一个不同的存储引擎,执行CREATE TABLE 语句没有指定ENGINE= clause
  98.  
  99. 创建一个InnoDB
  100.  
  101. InnoDB表的好处;
  102.  
  103. 如果你使用MyISAM 但是没有提交由于技术原因,你可能找到InnoDB
  104. 有益的对于下面的原因:
  105.  
  106. 1.如果你的服务器崩溃因为一个硬件和软件原因,
  107.  
  108. 无论那个时间数据库发生了什么,你不需要做任何事情在重启数据库后。
  109.  
  110. InnoDB crash recovery 自动完成任何改变 crash时间点前提交的,
  111.  
  112. 不会做任何改变 在处理时但是没有提交, 只是重启和继续 在你离开的地方
  113.  
  114. 2.InnoDB buffer pool cache表和索引的数据 当数据被访问,
  115.  
  116. 频繁使用的数据是直接从内存里处理, 这个cache应用于很多类型的信息,并加速处理
  117.  
  118. 3. 如果你把相关数据到不同的表,你可以设置外键来强制完整性约束。
  119.  
  120. 更新或者删除数据,相关的数据在其他的表是被更新或者自动删除。
  121.  
  122. 尝试插入数据到一个secodary 表没有相关数据在primary table,那么坏数据会自动被踢出
  123.  
  124. 4.如果数据变得损坏在磁盘或者内存,一个checksum 机制提醒你虚假数据在你使用前
  125.  
  126. 5. 当你设计你的数据库以适当的主键列对于每个表,
  127.  
  128. 操作涉及哪些列会被自动的优化。
  129.  
  130. 它是非常快的来引用主键列在WHERE子句里,ORDER BY 子句,GROUP BY 子句和join关联。
  131.  
  132. 6.插入,更新,和删除会被优化通过一个自动的机制称为change buffering.
  133.  
  134. InnoDB 不只是允许并发的读和写访问相同的表,它caches 改变的数据到streamline disk
  135.  
  136. I/O.
  137.  
  138. 7.性能优势不局限于长时间查询的巨型表格。
  139.  
  140. 当相同的记录被访问从表反复的访问,一个功能称为一个自动式的Hash Index 任务
  141.  
  142. 会让那些查询变得更快, 如果它们遇到一个hash
  143.  
  144. 8.你可以压缩表和相关的索引
  145.  
  146. 9.你可以创建和删除索引对性能和可用性影响很小
  147.  
  148. 10. Truncate 一个 file_per_table tablespace是很快的,
  149.  
  150. 可以释放次磁盘空间用于操作系统重用,而不是释放空间在system tablespace 只有InnoDB
  151.  
  152. 以使用
  153.  
  154. 11. 表数据的存储布局是更加有效的对于BLOBlong text 字段, 具有动态行格式
  155.  
  156. 12.你可以监控存储引擎的内部工作情况通过查询INFORMATION_SCHEMA tables.
  157.  
  158. 13.你可以通过查询性能Schema tables 来监控存储引擎的性能细节
  159.  
  160. InnoDB 表的最新改进:
  161.  
  162. MySQL 继续努力的解决使用的情况 以前需要MyISAM表的情况,在MySQL 5.6和更高的版本:
  163.  
  164. 1.InnoDB 可以执行全文搜索使用FULL TEXT index类型。
  165.  
  166. 2.InnoDB 现在执行一个更好的只读和以读为主的负载。自动优化应用InnoDB查询在自动提交
  167.  
  168. 模式,
  169.  
  170. 你也可以显示的让事务为只读 语法是START TRANSACTION READ ONLY.
  171.  
  172. InnoDB 表的最佳实践:
  173.  
  174. 一些常用的最佳实践用于InnoDB表包括:
  175.  
  176. 1.指定一个主键列用于每个表使用最多嘴频繁的查询列或者多列,
  177.  
  178. 或者一个自动增加的值如果没有明显的主键列
  179.  
  180. 2.使用关联无论数据是从多个表基于相同的ID值拉取那些表里。
  181.  
  182. 对于一个快速关联性能,定义外键在关联列上,定义那些列具有相同数据类型在每个表。
  183.  
  184. 增加外键确保相关的列被索引,可以改善性能。外键也会传播删除或者更新到所有相关的表,
  185.  
  186. 避免 数据插入到一个字表如果相应的IDs 是不在父表出现。
  187.  
  188. 3. 关闭自动提交,提交每秒数百次puts 一个性能上限( 由你的存储设备写的速度限制)
  189.  
  190. 4.分组相关的DML操作到事务,通过把它们归为一类 使用 START TRANSACTIONCOMMIT 语句
  191.  

  192. 这样你不需要太频繁地提交,
  193. 你不需要执行大量的批处理插入,修改或者删除
  194.  
  195. 运行几个小时没有提交。
  196.  
  197. 不要使用LOCK TABLE 语句,InnoDB 可以一次处理多个会话都读取和写入相同的表。
  198.  
  199. 不牺牲可靠性或者高性能。 得到排它写访问一个数据集,使用
  200.  
  201. SELECT ... FOR UPDATE语句来锁住你打算更新的rows.
  202.  
  203. 5.启用 innodb_file_per_table 选项来防止数据和索引对于单独的表到单独的文件,
  204.  
  205. 代替一个单独的巨大的system tablespace.
  206.  
  207. 这个设置是需要使用一些其他的功能, 比如表压缩和快速truncate
  208.  
  209. 6.innodb_file_per_table 选项是在MYSQL 5.6.6中默认启用
  210.  
  211. 7.评估是否你的数据访问模式收益与InnoDB表压缩功能(ROW_FORMAT=COMPRESSED)
  212.  
  213. CREATE TABLE 语句,你可以压缩InnoDB 表而不需要牺牲读/写能力
  214.  
  215. 8.运行你的server 带上选项 --sql_mode=NO_ENGINE_SUBSTITUTION
  216.  
  217. 来防止表被创建为一个不同的存储引擎。
  218.  
  219. 测试和设定基准 InnoDB作为默认的存储引擎:
  220.  
  221. 如果 InnoDB 不是你的默认的存储引擎,你可以确定你的数据库服务器或者应用
  222.  
  223. 工作正常 使用InnoDB 通过重启server 带上--default-storage-engine=InnoDB
  224.  
  225. 或者 default-storage-engine=innodb 定义在 [mysqld] 章节在你的my.cnf配置里。
  226.  
  227. 由于改变了默认的存储引擎之影响新表 当它们被创建的时候,
  228.  
  229. 运行你所有的应用安装和安装步骤来确认 所有的安装是正确的。
  230.  
  231. 然后,运用所有的应用程序的功能来确保所有数据的加载,编辑和查询功能正常。
  232.  
  233. 如果一个表依赖一些MyISAM特性功能,你会收到一个错误, 增加ENGINE=MyISAM clause
  234.  
  235. 在创建表的时候来避免错误。
  236.  
  237. 如果你没有最初一个深思熟虑的决定关于存储引擎,
  238.  
  239. 你只想要预览某些表如何工作当它们创建在InnoDB引擎下,
  240.  
  241. 执行ALTER TABLE table_name ENGINE=InnoDB;
  242.  
  243. 对于每个表,或者,运行test查询和其他语句没有描述原始表,做一个表的copy
  244.  
  245. CREATE TABLE InnoDB_Table (...) ENGINE=InnoDB AS SELECT * FROM MyISAM_Table;
  246.  
  247. 得到一个在网站的应用在真实负荷下的性能观点,安装最新的MySQL版本和运行基准测试。
  248.  
  249. 测试完整应用的生命周期, 从安装,通过大量使用,和服务器重启。
  250.  
  251. 杀掉server 进程当数据库是繁忙来模拟一个断电故障,
  252.  
  253. 验证数据是正常恢复的当重启服务器时。
  254.  
  255. 测试任何复制配置,特别是如果你使用不同的MySQL版本和选项在masterslaves上。
  256.  
  257. 验证InnoDB 是默认的存储引擎:
  258.  
  259. 验证InnoDB是默认的存储引擎
  260.  
  261. 1.执行SHOW ENGINES 命令行来查看不同的存储引擎。
  262.  
  263. 查看DEFAULT InnoDB 行,另外,查询INFORMATION_SCHEMA ENGINES table.
  264.  
  265. mysql> SHOW ENGINES
  266. -> ;
  267. +--------------------+---------
  268.  
  269. +----------------------------------------------------------------+--------------
  270.  
  271. +------+------------+
  272. | Engine | Support | Comment
  273.  
  274. | Transactions | XA | Savepoints |
  275. +--------------------+---------
  276.  
  277. +----------------------------------------------------------------+--------------
  278.  
  279. +------+------------+
  280. | PERFORMANCE_SCHEMA | YES | Performance Schema
  281.  
  282. | NO | NO | NO |
  283. | CSV | YES | CSV storage engine
  284.  
  285. | NO | NO | NO |
  286. | MEMORY | YES | Hash based, stored in memory, useful for
  287.  
  288. temporary tables | NO | NO | NO |
  289. | BLACKHOLE | YES | /dev/null storage engine (anything you write to
  290.  
  291. it disappears) | NO | NO | NO |
  292. | MRG_MYISAM | YES | Collection of identical MyISAM tables
  293.  
  294. | NO | NO | NO |
  295. | InnoDB | DEFAULT | Supports transactions, row-level locking, and
  296.  
  297. foreign keys | YES | YES | YES |
  298. | ARCHIVE | YES | Archive storage engine
  299.  
  300. | NO | NO | NO |
  301. | MyISAM | YES | MyISAM storage engine
  302.  
  303. | NO | NO | NO |
  304. | FEDERATED | NO | Federated MySQL storage engine
  305.  
  306. | NULL | NULL | NULL |
  307. +--------------------+---------
  308.  
  309. +----------------------------------------------------------------+--------------
  310.  
  311. +------+------------+
  312.  
  313. 2.如果InnoDB 不在场,你有一个mysqld binary 编译时没有InnoDB支持
  314.  
  315. 你需要得到另外一个
  316.  
  317. 3.

14.1.1 InnoDB as the Default MySQL Storage Engine的更多相关文章

  1. Mysql中ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8怎么转换为sql sever2008的代码

    ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8转换sql server AUTO_INCREMENT=2 ,是 自动递增列的 初始数值 = 2, ...

  2. 14.6.1 InnoDB Startup Configuration 启动配置

    14.6.1 InnoDB Startup Configuration 启动配置 首先描述关于InnoDB 配置设计数据库文件,日志文件,page size 和内存buffer 的配置. 推荐你定义数 ...

  3. 14.4.1 InnoDB Startup Configuration

    14.4 InnoDB Configuration :InnoDB 配置: 14.4 InnoDB Configuration 14.4.1 InnoDB Startup Configuration ...

  4. 14.7.4 InnoDB File-Per-Table Tablespaces

    14.7.4 InnoDB File-Per-Table Tablespaces 从历史上看,所有的InnoDB 表和indexes 是存储在system 表空间. 这个整体的方法是针对机器是整个用于 ...

  5. ubuntu 14.04 64位 下 编译安装MySQL 5.7.11

    步骤一: 先去mysql的官方网站 去down 编译源码包 mysql 网址:www.mysql.com downloads  (MySQL Community Server) 下载版本选择  sou ...

  6. 14.2.3 InnoDB Redo Log

    14.2.3 InnoDB Redo Log 14.2.3.1 Group Commit for Redo Log Flushing redo log 是一个基于磁盘数据结构的用于在crash 恢复正 ...

  7. 14.10.1 InnoDB Disk I/O

    14.10 InnoDB Disk IO and File Space Management InnoDB 磁盘IO和文件空间管理: 14.10.1 InnoDB Disk I/O 14.10.2 F ...

  8. 14.2.4 InnoDB Undo Logs

    14.2.4 InnoDB Undo Logs : 一个Undo log (或者成为回滚段) 是一个存储区域 持有被活动事务修改的数据的copy. 如果另外的事务需要看原始的数据(作为一致性读操作的一 ...

  9. 14.2.2 InnoDB Multi-Versioning InnoDB 多版本

    14.2.2 InnoDB Multi-Versioning InnoDB 多版本: InnoDB 是一个多版本的存储引擎: 它保留信息关于改变数据的老版本,为了支持事务功能 比如并发和回滚. 这些信 ...

随机推荐

  1. PHP学习笔记8-文件操作

    在data文件中写入数据: <?php /** * Created by PhpStorm. * User: Administrator * Date: 2015/6/29 * Time: 17 ...

  2. iPhone开发技巧之日志保存教程

    http://mobile.51cto.com/iphone-283337.htm Objective-C开发程序的时候,有专门的日志操作类NSLog,它将指定的输出到标准的错误输出上(stderr) ...

  3. hdu3483之二项式展开+矩阵快速幂

    A Very Simple Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

  4. cocos2d-x游戏开发系列教程-超级玛丽01-前言

    前言 上次用象棋演示了cocos2dx的基本用法,但是对cocos2dx并没有作深入的讨论,这次以超级马里奥的源代码为线索,我们一起来学习超级马里奥的实现,并以一些篇幅来详细讲述遇到的具体问题和具体的 ...

  5. 基于visual Studio2013解决算法导论之013基数排序

     题目 基数排序 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #in ...

  6. 基于visual Studio2013解决C语言竞赛题之0415特殊对数

       题目 解决代码及点评 这道题也是锻炼for循环,在for循环中遍历所有可能的数,然后再判断该数是不是有这样的性质 /********************************* ...

  7. [置顶] 自定义java Annotation快速入门与提高

    我们先来看看一个简单的注解类定义 import java.lang.annotation.Documented; import java.lang.annotation.Retention; impo ...

  8. ExecuteReader: CommandText 属性尚未初始化

    没有对sqlcommand对象的commandtext属性赋值说白了就是没写SQL语句 -.- 无语死了.

  9. AdbWinApi编译详解(本人亲历)

    1. 从微软官方下载WDDK,比如:GRMWDK_EN_7600_1.ISO(http://download.microsoft.com/download/4/A/2/4A25C7D5-EFBE-41 ...

  10. Can't connect to MySQL server on 'XXX' (13)

    出现can't connect to MySQL server using '' (13)的错误,结果是 SELinux 不让 httpd 访问外网,一开始还以为是iptables造成的,关闭之后发现 ...