2011-08-20 32 views
2

假设在MySQL(MyISAM数据)表两列:MySQL如何处理长度有限的化合物唯一索引?

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个字符应该在唯一索引中受到尊重。对不起英文不好。我试图尽可能地解释。所以如果看起来令人困惑,请耐心等待,如果有必要,我乐意提供更多信息。

回答

2

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

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

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

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