MySQL表中声明的列后面的括号中的数字是什么';外键代表什么?

MySQL表中声明的列后面的括号中的数字是什么';外键代表什么?,mysql,database,performance,syntax,foreign-keys,Mysql,Database,Performance,Syntax,Foreign Keys,前几天,我遇到了一个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)”在那个关键定义中的作用吗?它是否限制了从TINYINT(1)的“1”参数的“object_type”排序

前几天,我遇到了一个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)”在那个关键定义中的作用吗?它是否限制了从TINYINT(1)的“1”参数的“object_type”排序中检索的字符数


我面临的更大的问题是,此表被复制到不同环境(如开发、登台、测试、生产等)中的几个数据库中,并且仅在其中一个环境中定义了此键。尝试删除密钥导致数小时内没有任何事情发生,然后连接中断。就这个表而言,仅在这一个环境中的性能非常慢,以至于无法使用(尽管该表有5453757条记录)。在未定义此键的环境中,涉及此表的操作以可接受的速度运行。关于此表,环境/数据库之间没有其他区别

通常,类似于
(4)
的提示表示只有该字段的前4个字母被索引。有时字段太长,无法对其进行整体索引,因此您需要关注子集


这对
UNIQUE
类型索引产生了巨大的影响,在这些索引中,只有前N个字符具有唯一性。如果你只关心顺序,这是一个优化技巧。

这是2007年MySQL的一个版本,所以性能糟糕也就不足为奇了。升级到5.6应该会看到速度上的显著变化。谢谢,请插入:)。目前正在开发一个遗留代码库/系统,我不仅没有能力进行这样的更改,而且被告知在可预见的未来更新任何东西都不是切实可行的(在强烈建议将所有东西升级到现代版本成为任务关键型目标之后)。现在,在2006-2007年的webdev堆栈范围内尽我所能。如果你有性能问题,在一个不仅过时,而且不再受支持的平台上解决它们并不容易。MySQL通常非常擅长更新,您无需做太多事情,并保持良好的向后兼容性。我以前从未遇到过更新MySQL的问题。我至少会在新的引擎上对其进行基准测试,看看这是否会产生任何有用的结果。如果没有,您可能需要花费大量费用更新硬件。切换到SSD解决了很多问题。所以无论如何,回到问题上来……我的建议仍然有效。如果他们从2007年开始运行服务器软件,他们将自己置于严重的风险之中,毫无疑问,该系统存在无数未修补的安全问题。升级MySQL通常是一个无痛的过程,很少有并发症,我打赌如果你在一个更新的版本上测试它,你会发现它的速度要快得多。如果它“速度太慢,无法使用”,那么升级几乎是强制性的。几个小时的工作可以完全解决这个问题。