2010-03-09 60 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) 

您可能也想看看錶連接的概念。

相關問題