2010-11-11 149 views
2

我必須將數百萬個URL存儲在數據庫中,並且能夠快速地按URL查找行。URL的數據庫索引

的MySQL的字符串索引不是本足夠快,因爲它們只索引開始www.和比較第一4個字符的字符串,其通常www.,然後MySQL的遍歷每個這些行的與我搜索的網址的值。

MongoDB不允許您自定義爲字符串索引了多少個字符,並且the docs aren't very detailed,所以我不認爲MongoDB是合適的。

Google App Engine有一個特殊的URL類型,它很棒,但我不能使用GAE。

有什麼建議嗎?

回答

8

MySQL的字符串索引對此並不夠快,因爲它們只索引字符串的前4個字符(通常是www。),然後MySQL遍歷每個以www開頭的行。並將該值與我搜索的網址進行比較。

這是不正確的。 MySQL可以索引1000字節爲MyISAM767字節爲InnoDB

如果你只需要字面匹配你的URL字符串,索引它們的散列值。

這會保持您的索引尺寸較低(如果您使用類似MD5的東西,則每個鍵的16字節)並且鍵值將均勻分佈。

+0

我會測試這個。謝謝。 – 2010-11-11 14:00:22

0

如果您使用MySQL,請閱讀High Performance MySQL (2nd ed.)的第103-104頁(鏈接允許您在書中搜索 - 查找「pseudohash」),其中涵蓋了用於索引URL的散列方法。最重要的是,它建議使用MySQL的CRC32功能而不是MD5來獲得更好的性能,因爲它生成的值可以更快地進行比較。

+0

crc32如何提供更好的選擇性?性能,也許,但選擇性? – 2010-11-11 20:36:35

+0

你是對的,回答編輯。 – orangepips 2010-11-11 21:40:41