在 MySQL 中,对于二进制数据类型的列应该使用哪种索引?

7
我正在编写一个简单的工具来检查重复文件(即具有相同数据的文件)。该机制是使用sha-512算法为每个文件生成哈希,然后将这些哈希存储在MYSQL数据库中。我将哈希存储在二进制(64)唯一非空列中。每行将具有唯一的二进制哈希值,并用于检查文件是否重复。
-- 我的问题是 -- 1. 我可以在二进制列上使用索引吗?我的默认表排序规则是latin1 - 默认排序规则? 2. 为了获得高性能,应该使用Btree还是Hash索引机制?我需要每秒更新或添加100行。 3. 我应该注意哪些其他事项以获取最佳性能?
1个回答

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

    可以,因为排序规则只适用于字符数据类型,而不适用于二进制数据类型(它定义了字符的排序方式) - 另外,要注意 latin1 是一种字符编码,而不是排序规则。

  2. 我应该使用Btree还是Hash索引机制来获得高性能? 我需要每秒更新或添加100行。

    请注意,哈希索引仅可用于MEMORYNDB存储引擎,因此您可能没有选择权。

    无论如何,两者都通常能够满足性能要求-尽管对于这个特定的应用程序,我看不出使用B-Tree(有序)的好处,而使用Hash将提供更好的性能。 因此,如果可以选择,最好使用Hash。

    有关更多信息,请参见比较B-Tree和Hash索引

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

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


1
我正在使用InnoDB存储引擎来存储哈希表,因此HEAP索引机制不可用。我认为,B树索引也不错。 - Yogesh R.L

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接