我有一个MySql Innodb表,其中有一列"url",包含唯一的不重复url列表。某些URL的长度可以超过255个字符。我定期添加多个url,这些url可能包含表中已经存在的url,并且需要过滤掉这些url。
在遇到那些长url(>255)之前,我有了下一个同时添加多个记录的设置:
- "url"列类型设置为varchar(255)
- 主键设置为列"url"
添加了多条记录:
INSERT IGNORE INTO table (url) VALUES (url1),(url2),..,(urln)
它只向表中添加唯一的不重复URL。
如果我试图将varchar长度更改为大于255的数字,我会得到一个错误:
Specified key was too long; max key length is 767 bytes
除了依赖主/唯一密钥之外,是否有一种方法可以添加多个记录,同时避免重复?
我知道innodb_large_prefix = ON
设置将索引限制增加到3000+字节,但我很困惑为什么该设置会在以后的MySql版本中贬值,在某种程度上,我仍然担心会超过增加的限制(尽管可能性很小)。
我还尝试过使用部分前缀,但没有成功。
在没有重复和密钥长度限制的情况下添加多个记录的最佳方法是什么?
您可以另外存储链接的md5或sha哈希,并在该列上创建索引。