我应该在二进制数据类型列mysql上使用哪个索引

时间:2013-05-29 06:32:13

标签: mysql indexing collation b-tree-index

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

- 我的问题是 -

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

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

  3. 我应该注意哪些其他方面才能获得最佳表现?

1 个答案:

答案 0 :(得分:11)

  1.   

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

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

  2.   

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

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

    无论如何,要么通常能够满足你的性能标准 - 尽管对于这个特定的应用程序我看不到使用B-Tree(有序)的好处,而Hash会提供更好的性能。因此,如果您有选择,您也可以使用Hash。

    有关详细信息,请参阅Comparison of B-Tree and Hash Indexes

  3.   

    我应该采取哪些其他措施来获得最佳表现?

    取决于您对“最佳表现”和您的环境的定义。一般来说,请记住Knuth的格言“过早优化是所有邪恶的根源”:也就是说,只有在您知道最简单的方法存在问题时才进行优化。