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

参考|参考手册|中文

InnoDB 中文参考手册 --- 犬犬(心帆)翻译 14 InnoDB 表的限制 在 < 3.23.50 版本的 InnoDB 中,不可以使用 ALTER TABLE 或 CREATE INDEX 来修改一个已经有了外键约束或参考了外键约束的表。使用 DROP TABLE 和 CREATE 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 类型。 如果以一个列的前面部分建立索引:
CREATE TABLE T (A CHAR(20), B INT, INDEX T_IND (A(5))) TYPE = InnoDB;
InnoDB 将内在的在整个列上建立一个索引,而不是仅以设定的首部分。 InnoDB 表不支持 INSERT DELAYED 。 MySQL 的 LOCK TABLES 操作无法知道一个 SQL 语句已完成对 InnoDB 的行锁定:这就意味着即使已有其它用户的事务在同一张表上设置了行锁,你仍然会锁定该表。 所以你在这张表上的操作与其它用户的锁定冲突则不得不等待。同样死锁也是可能的。无论如何, 这能事务完整性(transaction integrity)并不危险,因为 InnoDB 设置的行级锁定通常会照顾完整性(integrity)的。同样,一个表级锁定可以防止其它事务在表上获得更多的行级锁定(锁定模式不一致)。 在 BLOB 或 TEXT 字段上无法设置索引。 一张表不可以有超过 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_SIZE 和 UNIV_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。 

时间: 2025-01-01 18:28:42

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

InnoDB 中文参考手册 --- 8 InnoDB 事务模式与锁定

参考|参考手册|中文 InnoDB 中文参考手册 --- 犬犬(心帆)翻译 8 InnoDB 事务模式与锁定在 InnoDB 事务处理模式中, the goal has been to combine the best properties of a multiversioning database to traditional two-phase locking. InnoDB 进行行级的锁定,并以与 Oracle 非锁定读取(non-locking)类似的方式读取数据. InnoDB 中的锁

InnoDB 中文参考手册 --- 2 InnoDB 启动选项

参考|参考手册|中文 InnoDB 中文参考手册 --- 犬犬(心帆)翻译 2 InnoDB 启动选项为了在 MySQL-Max-3.23 中使用 InnoDB 表,你必须在配置文件'my.cnf'或'my.ini'(WINDOWS系统)中的 [mysqld] 区中详细指定配置参数. 作为最小设置,在 3.23 中你必须在 innodb_data_file_path 上指定数据文件名能及大小.如果在'my.cnf'中没有指定innodb_data_home_dir,系统将在 MySQL 的 da

InnoDB 中文参考手册 --- 11 表和索引结构

参考|参考手册|索引|中文 InnoDB 中文参考手册 --- 犬犬(心帆)翻译 11 表和索引结构MySQL 在数据库目录下的 .frm 文件中存储它的数据字典信息.但是每个 InnoDB 类型表也同样在 InnoDB 表空间内的内部的数据字典中存在它自己的进入点.当 MySQL 移除(drop) 一个表或一个数据库时,它将同时删除 .frm 文件,以及在 InnoDB 的数据字典中相对应的进入点.这就是为什么不能通过简单的删除 .frm 文件为移除数据库中的 InnoDB 类型表的原因,以及

InnoDB 中文参考手册 --- 目录

参考|参考手册|中文 InnoDB 中文参考手册 --- 犬犬(心帆)翻译 InnoDB home InnoDB Engine in MySQL-Max-3.23.56/MySQL-4.0.12The Up-to-Date Reference Manual of InnoDB Updated April 21, 2003: Added notes to section 4.3 that a self-referential ON UPDATE CASCADE and SET NULL conve

InnoDB 中文参考手册 --- 6 备份和恢复 InnoDB 数据库

备份|参考|参考手册|恢复|数据|数据库|中文 InnoDB 中文参考手册 --- 犬犬(心帆)翻译 6 备份和恢复 InnoDB 数据库安全的数据库管理就是使用正规的数据备份. InnoDB Hot Backup 是一个在线备份工具,你可以在 InnoDB 数据库运行时使用它来实现在线备份.InnoDB Hot Backup 不需要你关闭你的服务器也不需要加任何锁或影响其它普通的数据操作.InnoDB Hot Backup 是一个非免费的附加工具,它的费用为每 MySQL 服务器每年 400

InnoDB 中文参考手册 --- 9 性能调整技巧

参考|参考手册|技巧|性能|中文 InnoDB 中文参考手册 --- 犬犬(心帆)翻译 9 性能调整技巧(Performance tuning tips)1. 如果 Unix top 或 Windows 任务管理器(Task Manager) 显示服务的 CPU 占用率小于 70%,(shows that the CPU usage percentage with your workload is less than 70 %,)你的系统瓶颈可能在磁盘读写上.或许你提交了大量的事务,或者是缓冲池

InnoDB 中文参考手册 --- 13 出错处理

参考|参考手册|中文 InnoDB 中文参考手册 --- 犬犬(心帆)翻译 13 出错处理InnoDB 的出错处理不总是与 ANSI SQL 指定的一致.依照 ANSI 标准,在一个 SQL 语句中的任何错误都将引起这条语句的回滚.InnoDB 有时只回滚语句的一部分,有时则是整个事务. 下面的列表详细说明了 InnoDB 的出错处理. 如果用完了表空间内的文件空间,将会得到 MySQL 的 'Table is full' 错误,InnoDB 将回滚这条 SQL 语句. 事务的死锁或锁定等待的超

InnoDB 中文参考手册 --- 5 添加与移除 InnoDB 数据和日志文件

参考|参考手册|数据|中文 InnoDB 中文参考手册 --- 犬犬(心帆)翻译 5 添加与移除 InnoDB 数据和日志文件为了添加一个数据文件到表空间中,首先要关闭 MySQL 数据库,编辑 my.cnf 文件,在 innodb_data_file_path 中添加一个新文件,然后再重新启动服务. 如果,最后一个文件以关键字 autoextend 来描述,那么编辑 my.cnf 的过程如下所示.必须检查最后一个文件的尺寸,并使它向下接近于 1024 * 1024 bytes (= 1 MB)

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

参考|参考手册|中文 InnoDB 中文参考手册 --- 犬犬(心帆)翻译 1 InnoDB Tables 概述 InnoDB 给 MySQL 提供了具有事务(commit).回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表.InnoDB 提供了行锁(locking on row level),提供与 Oracle 类型一致的不加锁读取(non-locking re