MySQL中UNIQUE索引的最大大小

时间:2013-05-15 14:43:14

标签: mysql

MySQL中是否有UNIQUE索引的最大大小? 我的索引中有六个维度,这导致了一个庞大的索引。 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      |         |               |
+-------+------------+----------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

1 个答案:

答案 0 :(得分:15)

对于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