MySQL如何处理有限长度的复合唯一索引?

时间:2011-08-20 04:01:25

标签: mysql unique compound-key

假设MySQL(MyISAM)表中有两列:

title VARCHAR(1500)
url VARCHAR(155)

我想在两列上创建复合唯一索引。我知道限制长度功能用于太长的列(例如我的title列)。它如何与复合索引一起使用?

我想要的是:

|--- url_value ---| + |--- title_value ---|
|--------155------| + |--------rest-------| <-- This should be the key length

我的意思是密钥应该具有最大长度(我使用utf8作为编码,因此对于唯一索引,每列允许限制为333个字符),其中列url的所有155个字符和178个字符应在唯一索引中遵守列title。对不起英语不好。我尽力解释。如果看起来令人困惑,请耐心等待,如果有必要,我很乐意提供更多信息。

1 个答案:

答案 0 :(得分:2)

我不确定你的问题是什么,所以这可能没有真正回答它,但是在长字段上强制执行唯一性的一个选择是使用MD5强制对长字段的散列强制执行唯一约束,或任何其他适合您需要的哈希算法。所以......

title VARCHAR(1500)
url VARCHAR(155)
title_md5 VARCHAR(16)

您可以创建一个触发器,每次title_md5更新时自动填充title。然后,将您的唯一索引放在(url,title_md5)

当然这有一些缺点。实际表中存在更多开销 - 尽管其中大部分可以通过更小/更高效的索引来抵消。此外,索引title_md5不会更快地搜索实际的title列,因此如果您需要对其进行搜索,则可能需要title上的“重复”索引。 / p>