确定mysql索引的key_len是否“太长”的一般参数是什么?
例如,对于较长的VARCHAR列,拥有密钥会更长。在一个案例中,我有一个key_len=767
的索引。在这种情况下,我应该做类似的事情:
ADD INDEX (title(50));
答案 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列的前缀而不是整列。