InnoDB 中文参考手册 --- 14 InnoDB 表的限制

原创 2003年05月22日 08:27:00

14 InnoDB 表的限制

  • 在 < 3.23.50 版本的 InnoDB 中,不可以使用 ALTER TABLECREATE INDEX 来修改一个已经有了外键约束或参考了外键约束的表。使用 DROP TABLECREATE TABLE 来代替它。
  • 不可以将 MySQL 系统表(如 'user''host' )转换成 InnoDB 类型。系统表必须总是为 MyISAM 类型的。
  • InnoDB 表不支持全文搜索(fulltext search)。
  • MySQL 以自动提交模式(autocommit mode)执行复制(replication)。因此slave中的 consistent reads 可能看起来你部分处理过的事务,所以在 slave 中这种读取(read)并不是真正的 consistent 。这个限制在 3.23.52 不再存在。
  • InnoDB 在内部不保存一个表记录总数,这是由于 multiversioning 的原因使它实现有点复杂。为了响应一个查询 SELECT COUNT(*) FROM T ,InnoDB 不得不扫描表的一个索引,如果表没有完全在缓冲池中这将花费一些时间。 为了得到更快的计数你不得不使用自己创建一个计数表,让你的应用程序在插入与删除时自己更新它。 消除因锁等待引起的瓶颈的一个方法就是创建整体的计数器集。应用程序可以随机地每次选择一个。 为了得到计数,仅仅只要对计数器求和:SELECT SUM(counter_column) FROM your_counter_table
  • 表中有 auto-increment 列的必须为它定义一个键,这个键必须仅仅包含这个 auto-increment 列。InnoDB 不支持在一个 CREATE TABLE 语句中使用 AUTO_INCREMENT=... 。这个子句是为了给一个 auto-increment 列设置第一个值(默认的第一个值为 1)。工作区(Workaround):向自增列中插入一个指定的值做为第一个值。从此,InnoDB 将从这值开始增加。
  • SHOW TABLE STATUS 不能给出 InnoDB 表的精密统计数据,除了由表保留的物理大小之外。记录行数只能通过一个优化的 SQL 来获得大致的估计。
  • 在 MySQL 中复制(replication)中,load table from master 仍然不能在 InnoDB 表中工作。 在主(master)服务器中开设一个工作区(workaround )用于将表转换成 MyISAM 型,然后再进行 load,之后再在 master 中将表改回 InnoDB 类型。
  • 如果以一个列的前面部分建立索引:
    
        InnoDB 将内在的在整个列上建立一个索引,而不是仅以设定的首部分。 
      
  • InnoDB 表不支持 INSERT DELAYED
  • MySQL 的 LOCK TABLES 操作无法知道一个 SQL 语句已完成对 InnoDB 的行锁定:这就意味着即使已有其它用户的事务在同一张表上设置了行锁,你仍然会锁定该表。 所以你在这张表上的操作与其它用户的锁定冲突则不得不等待。同样死锁也是可能的。无论如何, 这能事务完整性(transaction integrity)并不危险,因为 InnoDB 设置的行级锁定通常会照顾完整性(integrity)的。同样,一个表级锁定可以防止其它事务在表上获得更多的行级锁定(锁定模式不一致)。
  • BLOBTEXT 字段上无法设置索引。
  • 一张表不可以有超过 1000 个字段。
  • DELETE FROM TABLE 除了删除所有记录行之外不再重建表,一个接一个地删除,这并不那么快。在将来的 MySQL 版本中可以使用 TRUNCATE ,这是相当快的。
  • 在 <= 3.23.43 的 InnoDB 中,在对 InnoDB 表调用 DROP DATABASE 之前,必须调用 DROP TABLE 来移除(drop) 个体的 InnoDB 表。这个限制在 >= 3.23.44 的版本中不再存在。
  • InnoDB 默认的数据库页面大小为 16 kB。通过重新编译源代码可以设置为 8 kB 到 64 kB。你必须在 univ.i 中更新 UNIV_PAGE_SIZEUNIV_PAGE_SIZE_SHIFT 。在版本 <= 3.23.39a 的 InnoDB中,最大记录行长度为比数据库页面长度的一半稍小点。从源释放版本 3.23.39b (但是在 MySQL -Max 3.23.40 二进制释放版本中仍然没有)开始, BLOB 和 TEXT 字段允许 < 4 GB,整个行长度同样 < 4 GB。InnoDB 不在分开的页面中存储尺寸 <= 128 bytes 的字段。在 InnoDB 通过将长字段存储在分开的页面上修改记录后,剩余的记录行长度必须小于数据库页面的一半。最大键长为 500 bytes。
  • 日志文件的总尺寸必须 < 4 GB。
  • 最大表空间尺寸为数据库页面的 4 十亿(billion)倍。这同样也是一个表的最大尺寸。最小表空间为 10 MB。

 

InnoDB 中文参考手册 --- InnoDB Tables 概述

InnoDB 中文参考手册 --- 犬犬(心帆)翻译 code {color:purple} tt {color:green} samp {color:navy} pre {color:ma...
  • shuixin13
  • shuixin13
  • 2003年05月22日 08:28
  • 1084

innodb表最大列数限制

innodb 最大列数限制为1023,其中包含3个内部隐藏列,分别为:DB_ROW_ID(如果没有主键的情况), DB_TRX_ID事务id列,DB_ROLL_PTR回滚指针列。但是分配给用户自己所能...
  • sun_ashe
  • sun_ashe
  • 2016年09月04日 18:15
  • 478

InnoDB中文参考手册---14InnoDB表的限制

  • zgqtxwd
  • zgqtxwd
  • 2008年04月30日 07:23
  • 127

InnoDB 中文参考手册 --- 4 建立 InnoDB 表

code {color:purple} tt {color:green} samp {color:navy} pre {color:maroon}
  • shuixin13
  • shuixin13
  • 2003年05月26日 13:51
  • 1213

关于 InnoDB 索引长度限制的 tips

有同学问到InnoDB的索引长度问题,简单说几个tips。 关于3072 大家经常碰到InnoDB单列索引长度不能超过767bytes,实际上联合索引还有一个限制是3072。   ...
  • wangsg2014
  • wangsg2014
  • 2015年05月26日 16:01
  • 967

Mysql恢复(InnoDB)数据表

Mysql恢复(InnoDB)数据表,Navicat Premium32/64破解下载
  • u011271894
  • u011271894
  • 2017年06月15日 18:47
  • 468

Innodb 表和索引结构

表的结构:     对于MySQL把有的存储引擎都是把表结构的定义存放到.frm文件中。但对于Innodb表同时有一个内部的字典存放到表空间中。所以对于Innodb表不能单纯的移动.frm在不同的M...
  • frankaqi
  • frankaqi
  • 2014年06月10日 16:26
  • 572

【MySQL 5.7 Reference Manual】15.4.6 InnoDB Data Dictionary(InnoDB数据字典)

InnoDB数据字典由内部系统表组成,它包含了用于维持对象(比如表、索引和表列)记录的元数据。元数据的物理位置位于InnoDB系统表空间。由于历史原因,数据字典元数据和存储在InnoDB表元数据文件中...
  • along0314110
  • along0314110
  • 2017年01月02日 21:27
  • 174

InnoDB和MYIASM区别

MySQL默认采用的是InnoDB。 MyISAM不支持事务,MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,而InnoDB支持,InnoDB的AUTOCOMMIT默认是打开的,即...
  • jc_benben
  • jc_benben
  • 2017年08月11日 14:05
  • 210

(Mysql 七)InnoDB引擎的行锁和表锁

mysql常用引擎有MYISAM和InnoDB,而InnoDB是mysql默认的引擎。MYISAM不支持行锁,而InnoDB支持行锁和表锁。 1.行锁和表锁 2.行锁的类型 3.行锁的实现 ...
  • u014453898
  • u014453898
  • 2017年02月22日 00:32
  • 1477
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:InnoDB 中文参考手册 --- 14 InnoDB 表的限制
举报原因:
原因补充:

(最多只允许输入30个字)