2

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

title VARCHAR(1500)
url VARCHAR(155)

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

我想要的是这样的:

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

我的意思是键应该有最大长度(我使用 utf8 作为编码,所以我被限制为每列允许 333 个字符作为唯一索引),其中所有 155 个字符的列url和 178 个字符的列title都应该在唯一索引中得到尊重. 对不起英语不好。我尽量解释清楚。因此,如果它看起来令人困惑,请多多包涵,如有必要,我很乐意提供更多信息。

4

1 回答 1

2

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

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

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

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

于 2011-08-20T04:54:33.627 回答