14.6.7?Limits on InnoDB Tables   InnoDB 表的限制

警告:

不要把MySQL  system tables  从MyISAM 到InnoDB 表。

这是不支持的操作,如果你这么做,MySQL 不重启直到你恢复老的system tables从一个备份或者再生通过初始化数据目录。

这不是好的注意配置InnoDB 使用 data files或者log files 在NFS 文件系统,

否则, 文件可能被其他进程锁定和变的不可用:

最大值和最小值:

1. 一个表可以包含最大1017列(在5.6.9,从早期的1000提高到1017)

2.一个包可以包含最多64个secodary indexes

默认情况下, 一个index key 对于一个单列index 可以最大到767字节。

相同的长度限制应用于任何  index key prefix.

 比如, 你可以hit这个限制 在一个前缀索引列对于255个字节在一个TEXT或者VARCHAR列,

假设一个UTF-8 字符设置每个字符最大3个字节。

当 innodb_large_prefix 配置选项被启用,

mysql> show variables like '%innodb_large_prefix%';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| innodb_large_prefix | OFF |
+---------------------+-------+
1 row in set (0.00 sec) 长度限制上升到3072字节,对于InnoDB 表使用动态和COMPRESSED 行格式 尝试使用一个index prefix 长度大于允许的最大值会产生一个错误,为了避免这样的错误对于复制配置, 避免 设置 innodb_large_prefix 选项 在master上如果 它不能设置在slaves, slaves 有一个唯一索引 mysql> show variables like '%innodb_page_size%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| innodb_page_size | 16384 |
+------------------+-------+
1 row in set (0.00 sec) 如果你降低InnoDB page szie 到8KB 或者4KB 通过指定innodb_page_size option 在创建MySQL 实例的时候 index key 的最大长度是降低比例, 对于一个16KB page size 基于3072字节。 也就是说, 最大的index key length 是1536字节当page size 是8KB, 768 字节当page 是4KB 最大的行长度,除了对于可变长度列(VARBINARY, VARCHAR, BLOB and TEXT), 是略少于一半的数据库页。 最大行长度是大概8000字节对于默认的page size 16KB 如果一个行是小于一半的page 长度, 行所有都存储在本地。 尽管 InnoDB 支持row sizes 大于65,535字节, MySQL 本身实现一个行大小限制为65535 1.在一些老的操纵系统上, 文件必须小于2GB。 这个不是InnoDB 本身限制, 但是如果你需要一个更大的表空间,你需要配置它使用多个小的文件相比一个大的文件 2. InnODB log files 组合大小可以最大到512GB 3.最小tablespace size 时略小于10MB, 最大的tablespace 大小是64TB。 这也是表的最大值 默认的database page size 在InnoDB 是16KB,或者你可以降低页面大小到8KB或者4KB 通过指定 innodb_page_size 在创建MySQL 实例的时候: mysql> show variables like '%innodb_page_size%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| innodb_page_size | 16384 |
+------------------+-------+
1 row in set (0.00 sec) 注意: 增加pages size 是不支持的操作, 没有保障InnoDB 会工作正常在使用一个page size 大于16KB. 编译或者运行InnoDB 可能发生错误。 特别的, ROW_FORMAT=COMPRESSED 在Barracuda 文件格式 一个MySQL 实例使用一个特定的InnoDB page size 不能使用data files或者log files 在一个实例里使用一个不同的page size . 这种限制会影响恢复或者downgrade 操作在MySQL 5.6中使用数据 Index Types 索引类型: 1.InnoDB 表支持全文索引 2. InnoDB 表支持指定的数据类型,但不是在它们上面的Indexes 在InnoDB 表上的限制: 1. ANALYZE TABLE 决定index cardinality( 在SHOW INDEX output 输出的评估列) 通过随机的dives 到每个index trees 和更新index cardinality ,因为这些只是评估, 重复运行ANALYZE TABLE 会产生不同的数字。 这使得ANALYZE TABLE fast 在InnoDB表单不是100%精确 因为它不考虑所有的行。 index cardinality: 基数(Cardinality) 列唯一键(Distinct_keys)的数量,比如性别,该列只有男女之分,所以这一列基数是2。主键列的基数等于行数。 你可以收集统计信息通过ANALYZE TABLE更加精确和更加稳定通过设置 innodb_stats_persistent 配置选项 mysql> show variables like '%innodb_stats_persistent%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| innodb_stats_persistent | ON |
| innodb_stats_persistent_sample_pages | 20 |
+--------------------------------------+-------+
2 rows in set (0.00 sec) 当设置被启用, 运行ANALYZE TABLE 是重要的 在重要的改变到索引列的数据,因为 统计信息不会定期的重新收集 (比如在一个server 重启后) 你可以改变随机dives 的数量通过修改 innodb_stats_persistent_sample_pages 系统变量 ( 如果persistent statistics setting 是开启的) 或者 innodb_stats_transient_sample_pages MySQL 使用index cardinality 评估只有在关联优化时, 如果一些关联是没有被优化以正确的方式, 你可以尝试使用ANALYZE TABLE . 在少数情况下, ANALYZE TABLE 不会产生足够好的值对于你的实际表, 你可以使用 FORCE INDEX 在你的查询来强制使用一个特定的索引, 或者设置 max_seeks_for_key 来确保MySQL 建议index lookups 如果语句或者事务 是运行在一个表, ANALYZE TABLE 是运行在相同的表 跟着一个 second ANALYZE TABLE operation, second ANALYZE TABLE operation 会被堵塞 直到 语句或者事务完成。 这个行为发生因为 ANALYZE TABLE 让当前加载的表定义过期了当ANALYZE TABLE完成运行时。 新的语句或者事务(包含 一个 second ANALYZE TABLE statement) 必须加载新表定义到表cache, 不能发生直到当前运行语句或者事务是完成了,老的表定义是被purged. 加载多个并发表定义是不支持的。 SHOW TABLE STATUS 不会给出准备的统计信息 ,除非 表的物理大小会被保留。 行计数只是用于一个SQL优化评估使用 InnoDB 不保持 一个内部的行的记录数,因为并发的事务 可能"看到"不同的行的记录数在相同的时间。 处理一个 SELECT COUNT(*) FROM t statement, InnoDB 描述一个表的索引, 会花费一些时间如果索引整个不在buffer pool里。 如果你的表不经常改变,使用e MySQL query cache 是一个好的方法。 为了得到一个快速的count统计, 你需要使用一个counter table。 让你的应用更新它,根据插入和删除。 如果一个人相应的行记录数是足够的,SHOW TABLE STATUS可以使用 在Windows上, InnoDB 总是存储 数据和表名字内部按小写, 移动数据库以2进制的方式从Unix 到Windows 或者从Windows到Unix,创建所有数据库和表使用小写 一个AUTO_INCREMENT 列 ai_col 必须定义为一个索引的一部分 这样才能可以执行一个等价的SELECT MAX(ai_col) lookup 在表上得到最大值。 典型的, 这是通过让列称为一些表索引的第一列 InnoDB 设置一个排它锁在在索引的尾部 当设置 innodb_autoinc_lock_mode=0 , mysql> mysql> show variables like '%innodb_autoinc_lock_mode%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| innodb_autoinc_lock_mode | 1 |
+--------------------------+-------+
1 row in set (0.00 sec) InnoDB 使用一个指定的AUTO-INC 表 lock 模式 lock被获得和持有到SQL语句的结束, 在访问自增列的统计。 别的客户端不能插入表 当AUTO-INC lock 被持有, 当你重启你的MySQL SERVER,InnoDB 可能重新使用一个old value 有AUTO_INCREMENT列产生但是没有被存储 (也就是说,一个值在老的事务中已经产生,但是被回滚) 当一个自增列整型列值用完,随后的插入操作返回一个重复值。 这是MySQL 的行为, 类似于MyISAM的工作方式 DELETE FROM tbl_name 不重新产生,但是删除所有的记录,一个接一个

14.6.7?Limits on InnoDB Tables InnoDB 表的限制的更多相关文章

  1. 14.8.3 Physical Row Structure of InnoDB Tables InnoDB 表的物理行结构

    14.8.3 Physical Row Structure of InnoDB Tables InnoDB 表的物理行结构 一个InnoDB 表的物理行结构取决于在创建表指定的行格式 默认, Inno ...

  2. 14.8.2 Role of the .frm File for InnoDB Tables InnoDB 表得到 .frm文件的作用

    14.8.2 Role of the .frm File for InnoDB Tables InnoDB 表得到 .frm文件的作用 Vsftp:/data01/mysql/zjzc# ls -lt ...

  3. 14.2.5.1 Role of the .frm File for InnoDB Tables InnoDB .frm文件的作用

    14.2.5.1 Role of the .frm File for InnoDB Tables: 14.2.5.1 Role of the .frm File for InnoDB Tables I ...

  4. 14.8.4 Moving or Copying InnoDB Tables to Another Machine 移动或者拷贝 InnoDB 表到另外机器

    14.8.4 Moving or Copying InnoDB Tables to Another Machine 移动或者拷贝 InnoDB 表到另外机器 这个章节描述技术关于移动或者复制一些或者所 ...

  5. 14.8.1 Creating InnoDB Tables 创建InnoDB 表

    14.8.1 Creating InnoDB Tables 创建InnoDB 表 创建一个InnoDB表,使用CREATE TABLE 语句,你不需要指定ENGINE=InnoDB 子句 如果Inno ...

  6. 14.6.2 Moving or Copying InnoDB Tables to Another Machine 移动或者copy InnoDB 表到另外的机器

    14.6.2 Moving or Copying InnoDB Tables to Another Machine 移动或者copy InnoDB 表到另外的机器 这个章节描述技术关于移动或者copy ...

  7. 14.6.1 Creating InnoDB Tables 创建InnoDB 表:

    14.6.1 Creating InnoDB Tables 创建InnoDB 表: 创建一个InnoDB 表,使用CREATE TABLE 语句,你不需要指定 ENGINE=InnoDB子句 如果In ...

  8. 14.6.11 Configuring Optimizer Statistics for InnoDB 配置优化统计信息用于InnoDB

    14.6.11 Configuring Optimizer Statistics for InnoDB 配置优化统计信息用于InnoDB 14.6.11.1 Configuring Persisten ...

  9. 14.1.3 Turning Off InnoDB 关掉InnoDB

    14.1.3 Turning Off InnoDB 关掉InnoDB: Oracle 推荐InnoDB 作为首选的存储引擎用于典型的数据库应用,从单用户的wikis到博客, 到高端应用把性能推到极限. ...

随机推荐

  1. 【转】CentOS 6.5 生产环境优化指南

    原文链接:https://www.deepwebcn.com/82.html centos6.5 CentOS 6.5 系统安装之后并不能立即投入生产环境使用,常常需要先经过我们运维人员的优化才行.优 ...

  2. Linux下tcpdump用法

    根据使用者的定义对网络上的数据包进行截获的包分析工具.tcpdump将网络中传送的数据包的“头”完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供了and. or.not等逻 ...

  3. 第四届蓝桥杯 c/c++真题

    第四届蓝桥杯 c/c++真题 <1>高斯日记 问题 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们 ...

  4. SQLyog 注册码

    用户名: 随意填写 秘钥: ccbfc13e-c31d-42ce-8939-3c7e63ed5417a56ea5da-f30b-4fb1-8a05-95f346a9b20ba0fe8645-3916- ...

  5. EXT.NET高效开发(三)——使用Chrome浏览器的开发人员工具

    这篇帖子老少皆宜,不分男女,不分种族,不分职业.俗话说:“磨刀不误砍柴工”.掌握一些开发工具的使用,对自己帮助是很大的(无论是用于分析问题,还是提高生产力).本篇就讲述如何利用Chrome浏览器(这里 ...

  6. 用CentOS,fedora等访问局域网中的Windows共享

    来到Linux世界中已有一段时间了,感觉上好像自己的电脑成了一个孤岛.周围的人都还是用Windows系统,能相互共享文件,我用Linux系统,别人的共享文件都还不知道怎么访问?通过网上查资料学习,现在 ...

  7. Codeforces 468D Tree

    题目 给出一棵带边权的树,求一个排列\(p\),使得\(\sum_{i=1}^{n}{dis(i, p_i)}\)的值最大,其中\(dis(v, u)\)表示\(v\)到\(u\)的距离. 算法 这题 ...

  8. UVA 1524 - Hot or Cold?(数学)

    UVA 1524 - Hot or Cold? 题目链接 题意:给一个一元n次方程,带入x表示时间,f(x)表示温度,如今要求[s, e]的平均温度 思路:平均温度就是 总温度/ (e - s),画出 ...

  9. Android TextView自己主动换行文字排版參差不齐的原因

    今天项目没什么进展,公司后台出问题了.看了下刚刚学习Android时的笔记,发现TextView会自己主动换行,并且排版文字參差不齐.查了下资料,总结原因例如以下: 1.半角字符与全角字符混乱所致:这 ...

  10. while和do while习题

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 练习 { ...