如何理解MySQL InnoDB表的限制

42次阅读
没有评论

共计 2158 个字符,预计需要花费 6 分钟才能阅读完成。

这期内容当中丸趣 TV 小编将会给大家带来有关如何理解 MySQL 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。 

上述就是丸趣 TV 小编为大家分享的如何理解 MySQL InnoDB 表的限制了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-19发表,共计2158字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)