MySQL5.6Innodb表的特性和极限

Innodb表限制:(详见MySQL官网http://dev.mysql.com/doc/refman/5.6/en/innodb-restrictions.html)


1.单表最多1017个字段。

2.但表最多可建64个普通索引。
3.默认情况下(innodb_page_size=16K),前缀索引最多包含767个字节。如果开启innodb_large_prefix,且Innodb表的存储格式为 DYNAMIC 或 COMPRESSED,则前缀索引最多可包含3072个字节,前缀索引也同样适用。
4.一个索引最多允许包含16个字段,如果减小数据页的大小,则索引允许的最大字节数也按比例缩小。
5.每行允许的最大长度略小于数据页的一半(包含变长字段的行除外),数据页大小为16K的情况下,每行允许的最大长度为8000字节。如果减小数据页的大小,则没行允许的最大字节数也按比例缩小。
  LONGBLOB 和 LONGTEXT类型的字段最大长度必须小于4G,总的字段长度,包括LONGBLOB 和 LONGTEXT类型字段在内,必须小于4G。
6.如果每行的长度小于半个数据页(8K,默认数据页大小为16K),则该行全部存储在一个数据页内,如果超过半页,可变长字段被移到外部的离线页存储,直到剩下的字段能存储在半个数据页内。
7.虽然Innodb内部支持行大小超过65535字节,MySQL会强制限制所有列的大小为65535.
8.log组所有log总大小最大为512G
9.最小表空间略大于10M,最大表空间大小为64T字节,这也是单表最大大小。

10.Innodb的数据页大小在创建MySQL实例时指定,指定后不能更改。默认数据页大小为16K,数据页超过16K,MySQL官方不做保证

11.在索引中包含自增列,这样可通过查找索引获得最大的自增值,而不需要做全部扫描。通常做法是把自增列定义索引的第一列。
12.当修改自增列时,,Innodb会在与自增列相关连的索引尾部设置互斥锁。分三中情况:

1)innodb_autoinc_lock_mode=0时,sql语句访问自增计数器时,该sql语句会持有锁直至语句完成,在此期间,其它会话无法对表进行插入操作。

2)innodb_autoinc_lock_mode=1时,如果当前事务在执行批量插入(bulk inserts),则其它会话无法对表进行插入操作。

3)innodb_autoinc_lock_mode=2时,当前事务不持有锁,其它事务可以正常执行插入操作。


13.重启mysql服务后,如果自增值没有保存,则Innodb可能会使用旧的自增值。
14.自增值超过最大值后,后续的插入操作会报duplicate-key错误。

15.不加条件的delete操作不会重建表,而是一行行删除表中的记录。

16.销毁外键不会触发触发器。



关于锁:

17.默认情况下(innodb_table_locks=1),执行LOCK TABLES操作会在相应的表上施加msyql表锁和innodb表锁。如果没有innodb表锁,则在其它事务锁表的情况下,也能完成对该表的锁定。

mysql5.6版本中,innodb_table_locks=0时对明确指定 LOCK TABLES ... WRITE的锁表操作没影响。


18.所有innodb 表锁在事务提交或回滚后被立即释放,当事务处于自动提交模式(autocommit=1)时,不会调用 LOCK TABLES命令进行锁表操作。
19.MySQL5.5之前,最多允许1023个dml事务,自5.6之后,最大dml事务提升为128 * 1023。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值