假设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
上进行搜索,则可能需要对其进行"重复"索引。