前几天我遇到了一个mysql(5.0.45-community-log)表,它在打印“show create table”语句后生成了一个键,如下所示:

KEY `idx_object_relation_3` (`object_id`,`object_type`(4),`status`,`user_type_id`,`created_datetime`)

有谁能给我解释一下这个关键定义中的“(4)”是什么意思吗?它是否限制了从“object_type”检索到的字符数,即tinyint(1)的“1”参数的工作方式?
im面临的更大问题是,此表跨不同环境(如开发、登台、测试、生产等)复制到少数数据库中,并且在这些环境中只有一个定义了此键。试图删除密钥导致几个小时内没有任何事情发生,然后失去连接。就这一个环境而言,这个表的性能太慢,无法使用(尽管该表有5453757条记录)。在未定义此键的环境中涉及此表的操作以可接受的速度运行。关于此表,环境/数据库之间没有其他区别。

最佳答案

通常,像(4)这样的提示表示只有该字段的前4个字母被索引。有时字段太长,无法对其全部进行索引,因此需要关注子集。
这对UNIQUE类型索引有着巨大的影响,因为它只会强制前n个字符具有唯一性。如果你只关心订单,这是一个优化技巧。

09-16 06:29
查看更多