15

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      |         |               |
+-------+------------+----------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
4

1 回答 1

20

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

于 2013-05-15T14:53:57.350 回答