4

我正在编写一个简单的工具来检查重复文件(即具有相同数据的文件)。该机制是使用 sha-512 算法为每个文件生成哈希,然后将这些哈希存储在 MYSQL 数据库中。我将哈希存储在 binary(64) 唯一的非空列中。每行都有一个唯一的二进制哈希,用于检查文件是否重复。

-- 我的问题是 --

  1. 我可以在二进制列上使用索引吗,我的默认表排序规则是 latin1 - 默认排序规则?

  2. 为了获得高性能,我应该使用 Btree 或 Hash 哪种索引机制?我需要每秒更新或添加 100 行。

  3. 为了获得最佳性能,我还应该注意哪些其他事项?

4

1 回答 1

13
  1. 我可以在二进制列上使用索引吗,我的默认表排序规则是 latin1 - 默认排序规则?

    是的你可以; 排序规则仅与字符数据类型相关,而不是二进制数据类型(它定义了字符的排序方式)——另外,请注意这latin1字符编码,而不是排序规则。

  2. 为了获得高性能,我应该使用 Btree 或 Hash 哪种索引机制?我需要每秒更新或添加 100 行。

    请注意,哈希索引仅适用于MEMORYNDB存储引擎,因此您甚至可能别无选择。

    无论如何,任何一个通常都能够满足您的性能标准——尽管对于这个特定的应用程序,我认为使用 B-Tree(它是有序的)没有任何好处,而 Hash 会提供更好的性能。因此,如果您有选择,不妨使用 Hash。

    有关详细信息,请参阅B 树和哈希索引的比较。

  3. 为了获得最佳性能,我还应该注意哪些其他事项?

    取决于您对“最佳性能”的定义和您的环境。一般来说,请记住 Knuth 的格言“过早优化是万恶之源”:即只有在知道最简单的方法会出现问题时才进行优化。

于 2013-05-29T06:43:01.250 回答