MySQL:存储唯一的 URL

nut*_*ute 6 mysql index database-design unique-constraint

我正在创建一个包含用户提供的 URL 的表。我希望这些是唯一的,所以当用户给我一个 URL 时,我将首先检查 URL 是否存在,如果存在,则返回条目的 ID。如果不是,则使用此 URL 创建一个新行。

显然我希望这很快。最好的选择是什么?

  • 将实际 URL 设为 UNIQUE 的 varchar 并通过此 URL 查找?
  • 对 URL 进行散列并将其用作排序的主键?
  • 其他想法?

Der*_*ney 7

我肯定会使用 url 的哈希值并使哈希值成为唯一索引。散列具有固定长度,因此您可以使用CHAR来指定列的长度,这比VARCHAR或稍微提高了性能TEXT

但是我可以建议使用INSERT IGNORE而不是对数据库进行两次调用吗?就像是:

INSERT IGNORE INTO urlTable VALUES ('urlHash');
Run Code Online (Sandbox Code Playgroud)

这样做的好处是可以忽略因尝试插入重复散列而可能产生的任何重复错误,而不必先进行SELECT COUNT(*)查询。