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

标签 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

我的意思是 key 应该具有最大长度(我使用 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 进行“重复”索引,如果您需要对此进行搜索。

关于mysql - MySQL 如何处理长度有限的复合唯一索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7129562/

相关文章:

java - 我将如何优化此外观以获得唯一的数字算法功能

SQL复合键

database - Django 的复合/复合主/唯一键

mysql - 由于格式错误的查询,Rails 事件记录对象保存操作失败

c# - 我可以从 MySql 触发器检索 Asp.net session 吗

Python MySQLDB - 并非所有参数都在字符串格式化期间转换

r - R 中的唯一行,考虑两列,无顺序

php - mysql pdo 连接没有关闭?

python - 在 Python 中为大量图像生成唯一哈希键的好策略是什么?