确定 mysql 索引的 key_len 是否“太长”的一般参数是什么?
例如,对于更长的 VARCHAR 列,拥有一个键会更长。在一种情况下,我有一个带有key_len=767
. 在这种情况下,我应该执行以下操作:
ADD INDEX (title(50));
如果您的表包含许多行和/或如果您执行大量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 列的前缀而不是整个列。