2013-05-29 34 views
3

我在寫一個簡單的工具來檢查重複文件(即具有相同數據的文件)。其機制是使用sha-512算法爲每個文件生成散列,然後將這些散列存儲在MYSQL數據庫中。我在二進制(64)唯一非空列中存儲散列。每行都有一個唯一的二進制散列,用於檢查文件是否重複。我應該在二進制數據類型列上使用哪個索引mysql

- 我的問題是 -

  1. 能否在二進制列使用索引,我的默認表排序規則是LATIN1 - 默認排序規則?

  2. 哪種索引機制應該使用Btree或Hash來獲得高性能?我需要每秒更新或添加100行。

  3. 我還需要照顧其他什麼東西以獲得最佳性能?

回答

8
  1. 我可以使用索引上的二進制列,我的默認表排序規則是LATIN1 - 默認排序規則?

    是的,你可以;排序規則僅適用於字符數據類型,不適用於二進制數據類型(它定義了字符應如何排序)—也請注意,latin1字符編碼,而不是排序規則。

  2. 哪個索引機制應該使用Btree或Hash來獲得高性能?我需要每秒更新或添加100行。

    注意,散列索引是僅適用於MEMORYNDB存儲引擎,所以你甚至可能不會有一個選擇。

    在任何情況下,要麼通常能夠滿足您的性能標準—,儘管對於這個特定的應用程序,我看不到使用B-Tree(它是有序的)的好處,而哈希會提供更好的性能。因此,如果你有選擇,你可以使用哈希。

    請參閱Comparison of B-Tree and Hash Indexes瞭解更多信息。

  3. 還有什麼其他的事情我應該照顧,以獲得最佳性能?

    取決於您對「最佳性能」和您的環境的定義。一般來說,記住Knuth的格言「過早優化是所有邪惡」的根源:也就是說,只有當你知道最簡單的方法會出現問題時才進行優化。

+0

我使用Innodb存儲引擎作爲散列存儲表,所以HEAP索引機制將不可用。我認爲,Btree索引不會太壞。 –

相關問題