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



假设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个字符和列title的178个字符都应该在唯一索引中得到尊重。抱歉英语不好。我尽力解释。所以,如果这看起来令人困惑,请耐心等待,如果有必要,我很乐意提供更多信息。

我不太确定你的问题是什么,所以这可能不会真正回答它,但在这样的长字段上强制唯一性的一个选项是,使用MD5或任何其他适合你需要的哈希算法,对长字段的哈希强制唯一约束。所以…

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

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

当然,这也有一些缺点。实际的表中有更多的开销——尽管其中大部分可以被更小/更高效的索引所抵消。此外,对title_md5进行索引并不能使搜索实际的title列的速度更快,因此如果需要在title上进行搜索,则可能需要对其进行"重复"索引。

相关内容

  • 没有找到相关文章

最新更新