存储md5url而不是url用作键对性能有何好处?

问题描述

我有一个包含许多URL的MysqL表,可以将URL以其原始形式存储,也可以将其存储为md5()值。

然后将其设置为索引列,以便可以更快地选择它们。

我想知道使用md5是否会带来任何性能优势,主要是因为考虑到数据始终具有相同的字符串大小(32),而不是存储长度范围从6个字符到128个或更多个字符的普通网址。 >

数据长度大致相同,我选择了20万条随机记录,并比较了url和md5(url)字符串大小:

total_url_chars: 7085326
total_hash_chars: 6400000

解决方法

简短的答案:请勿打扰使用md5。

详细答案:

  • 您的代码等的复杂性不容忽视。
  • 固定长度与可变长度不影响性能。
  • MD5将更快地“不同”,通常在前5个字符以内。在发现不匹配之前,URL通常必须走得更远。也就是说,使用md5,“比较”会更快。我认为这种差异不足以缩小规模。
  • 打包MD5(print(df1) ab result 0 Sl2 25 1 Sl4 30 2 Ss 11 3 Tu4 NaN 4 Slu 33 5 Su2/Su3 NaN 6 Ut2 NaN 7 Ss 11 8 Sl2 25 9 Slu 33 10 Slu 33 -> UNHEX(MD5(...))会缩小MD5的占用空间,但是摆脱MD5会进一步缩小其覆盖范围。
  • 如果URL太大而无法容纳在索引中,则必须执行某些操作。 (您说限制为128个字符吗?)
  • 添加另一列会以次要量损害所有查询的性能。 (同样,这不应该使秤小费。)