2010-03-09 59 views
3

我有两张表,列出了从不同来源获取的网址。哪个是比较两个网址的最好和最快的方法?

我想查找常用条目并将它们放在单独的表中。

这是我在做什么:

  1. 找到URL的MD5哈希值,而获取它们。
  2. 将它们存储在一列中。
  3. 我以数组的形式获取一个表,通过它运行一个循环并插入md5哈希值相同的其他表中的值。

编辑:我应该去掉“http://”和“www”的网址。

我想知道的任何其他方法,这是更好,更快,使用我可以执行上述

我使用PHP + MySQL的

+0

我有点好奇 - 谁能告诉我,为什么你会在所有的hash网址是什么?它是获得一个比较容易比较的数据类型(而不是字符串搜索)吗? –

回答

3

如果你需要真正的速度,MD5有点慢。尝试MurmurHash

你应该哈希计算之前执行下列转换:

  • 地带的 “http://” 和www。
  • 条斜线
  • 规范化URL(urlencode吧)
+0

用于标准化网址。 –

+0

顺便说一句,不确定MurmurHash的PHP实现将比md5函数更快。这需要测试。无论如何,真正的速度,你可以使PHP插件。 –

+0

我猜在PHP中实现MumurHash会很困难。还有其他更快的散列方法吗? – Jagira

0

试着这么做:

INSERT INTO table3 (SELECT url FROM table1, table2 WHERE table1.hash = table2.hash) 

这不是一个有效的SQL语句,但是像这样的嵌套查询应该读取来自table1和table2的URL,并通过它们的hash进行匹配并将它们放入table3。

编辑: 如果您想净化您的输入网址(例如删除GET变量),我会做到这一点之前,将它们保存到tabel1和table2。我不会删除http和www,因为“https://somesite”和“http://somesite”以及“www.somesite.com”和“somesite.com”可能有不同的内容。

0
SELECT * FROM table1 WHERE hash IN (SELECT hash FROM table2) 

您可能也想看看表连接的概念。

相关问题