MySQL中UNIQUE索引的最大大小

Mad*_*het 13 mysql

UNIQUEMySQL中是否有索引的最大大小?我的索引中有六个维度,这导致了一个庞大的索引.UNIQUE索引有基数限制吗?

我得到了奇怪的无法解释的错误,并想知道是否存在限制UNIQUE.它可能来自唯一性限制吗?这是它的样子(我也不明白为什么最后三列的基数不会增加).

+-------+------------+----------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name   | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+----------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| table |          0 | PRIMARY  |            1 | column_1      | A         |          15 |     NULL | NULL   |      | BTREE      |         |               |
| table |          0 | PRIMARY  |            2 | column_2      | A         |       91948 |     NULL | NULL   |      | BTREE      |         |               |
| table |          0 | PRIMARY  |            3 | column_3      | A         |      924889 |     NULL | NULL   |      | BTREE      |         |               |
| table |          0 | PRIMARY  |            4 | column_4      | A         |    15723114 |     NULL | NULL   |      | BTREE      |         |               |
| table |          0 | PRIMARY  |            5 | column_5      | A         |    15723114 |     NULL | NULL   |      | BTREE      |         |               |
| table |          0 | PRIMARY  |            6 | column_6      | A         |    15723114 |     NULL | NULL   |      | BTREE      |         |               |
+-------+------------+----------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
Run Code Online (Sandbox Code Playgroud)

svi*_*gen 16

对于InnoDB表,所有索引列的限制为3072字节,可能只占每列的前767个字节.

单列索引的索引键最多可达767个字节.相同的长度限制适用于任何索引键前缀.请参见第13.1.13节"CREATE INDEX语法".

InnoDB内部最大密钥长度为3500字节,但MySQL本身将其限制为3072字节.此限制适用于多列索引中组合索引键的长度.

http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html

所以,严格根据文档,我会说你的索引中最多可以有1000列(InnoDB表上的最大列数),前提是每个列的平均大小为3个字节或更少.

对于MyISAM表,它是16列或1000字节中的较小者.

每个索引的最大列数为16.

最大密钥长度为1000个字节.这也可以通过更改源和重新编译来更改.对于长度大于250字节的密钥的情况,使用比默认的1024字节更大的密钥块大小.

http://dev.mysql.com/doc/refman/5.0/en/myisam-storage-engine.html

  • @Tom有趣......我想对这意味着更全面的解释感兴趣.在大多数情况下,任意一般并不意味着"忽视限制",而是"在极限范围内突发奇想的任何价值". (2认同)