优化mysql索引上的key_len

时间:2012-07-29 23:47:16

标签: mysql sql indexing

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

例如,对于较长的VARCHAR列,拥有密钥会更长。在一个案例中,我有一个key_len=767的索引。在这种情况下,我应该做类似的事情:

ADD INDEX (title(50));

1 个答案:

答案 0 :(得分:2)

如果您的表包含许多行和/或如果您执行了大量SELECT ... ORDER BY个查询,那么在所涉及的字段上使用索引将加快SELECT查询。
但是,它会减慢这些字段的插入,写入和更新速度,因为索引也需要更新 表上的每个索引都使用磁盘空间:如果您的磁盘空间非常短,请使用较小的key_len。但是你的查询执行速度会慢一些。

想象一下只有一列的表,只有前3个字符被编入索引。该表包含:
蒂莫
Timothée
蒂姆
蒂莫西
蒂姆莫

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

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

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

The Innodb documentation says
在InnoDB中,具有长PRIMARY KEY(具有冗长值的单个列或者形成长复合值的多个列)浪费了大量磁盘空间。在指向同一行的所有辅助索引记录中,行的主键值重复。 (请参见第14.3.11节“InnoDB表和索引结构”。)如果主键很长,则创建一个AUTO_INCREMENT列作为主键,或者索引长VARCHAR列的前缀而不是整列。