sql—URL的前缀索引的最佳大小是多少(mysql)

kq4fsx7k  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(345)

我正在收集几百万行包含URL的数据。要消除这些重复,我需要在插入新行之前搜索现有的url。因此,我想在该列上创建一个索引。
知道大多数URL都以 http:// 或者 https:// ?

i7uq4tfw

i7uq4tfw1#

对于几百万行,基本上不可能 MD5(URL) 会发生意外碰撞。是32个十六进制数字( CHAR(32) CHARACTER SET ascii ). 或者更好 UNHEX(...) 把它放进去 BINARY(16) .
然后添加一个 UNIQUE 列上的索引。
你用的是什么版本?一些新版本的mariadb有类似的内置。

s4n0splo

s4n0splo2#

有两种方法可以在长字符串上添加索引:
为crc32(url)添加索引,只需添加一个名为 crc32_urls 并在此基础上创建索引。可能有些URL与crc32(URL)的结果相同,因此每次搜索时应按以下方式运行:

SELECT * FROM table WHERE crc32_urls = xxx AND urls = xxx

使用prefix index.来假设前缀的长度应该是多少。您可以通过

SELECT COUNT(DISTINCT urls)/COUNT(*) FROM table

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

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

相关问题