url(MySQL)的前缀索引的最佳大小是多少



我正在收集数百万行包含URL的数据。要消除这些重复,我需要在插入新行之前搜索现有的URL。因此,我想在该列上创建一个索引。

知道大多数URL以http://https://开头,最佳前缀大小是多少?

对于几百万行,MD5(URL)基本上不可能发生意外碰撞。这是一个32位十六进制数字(CHAR(32) CHARACTER SET ascii(。或者最好是UNHEX(...)并将其放在BINARY(16)中。

然后在该列上添加一个UNIQUE索引。

您使用的是什么版本?MariaDB的一些新版本有类似的内置功能。

有两种方法可以在长字符串上添加索引:

  1. 为crc32(url(添加索引,只需添加一个名为crc32_urls的列并在此列上创建索引。可能有些url通过crc32(url(得到了相同的结果,所以每次搜索时都应该这样运行:
SELECT * FROM table WHERE crc32_urls = xxx AND urls = xxx
  1. 使用前缀索引。用于假设前缀的长度应该是多少
SELECT COUNT(DISTINCT urls)/COUNT(*) FROM table

与相比

SELECT COUNT(DISTINCT left(urls, x))/COUNT(*) FROM table

x是您指定的长度。当两个数字接近时,选择最小长度。

相关内容

最新更新