1

确定 mysql 索引的 key_len 是否“太长”的一般参数是什么?

例如,对于更长的 VARCHAR 列,拥有一个键会更长。在一种情况下,我有一个带有key_len=767. 在这种情况下,我应该执行以下操作:

ADD INDEX (title(50));
4

1 回答 1

2

如果您的表包含许多行和/或如果您执行大量SELECT ... ORDER BY查询,则在所涉及的字段上设置索引将加速 SELECT 查询。
但是,它会减慢对这些字段的插入、写入和更新,因为索引也需要更新。
表上的每个索引都使用磁盘空间:如果磁盘空间确实不足,请使用较小的 key_len。但是您的查询会执行得更慢。

想象一个只有一列的表,并且只有前 3 个字符被索引。该表包含:
Timo
Timothée
Tim
Timothy
Timmo

SELECT * FROM `my_table` ORDER BY `name` ASC

此查询将使用索引,但由于其内容已部分编入索引,因此需要额外处理才能进行完整排序,并且执行时间会更长。

MySQL 索引最长可达 1000 字节(InnoDB 表为 767 字节)。(链接

Innodb 文档说
在 InnoDB 中,拥有长 PRIMARY KEY(具有长值的单列,或形成长复合值的几列)会浪费大量磁盘空间。行的主键值在指向同一行的所有二级索引记录中重复。(请参阅第 14.3.11 节,“InnoDB 表和索引结构”。)如果您的主键很长,则创建一个 AUTO_INCREMENT 列作为主键,或者索引一个长 VARCHAR 列的前缀而不是整个列。

于 2012-07-30T00:40:54.683 回答