我正在编写一个简单的工具来检查重复文件(即具有相同数据的文件)。机制是使用sha-512算法为每个文件生成哈希值,然后将这些哈希值存储在MYSQL数据库中。我在二进制(64)唯一非空列中存储哈希值。每行都有一个唯一的二进制哈希值,用于检查文件是否重复。
- 我的问题是 -
我可以在二进制列上使用索引,我的默认表格排序是latin1 - 默认排序规则吗?
我应该使用哪种索引机制Btree或Hash来获得高性能?我需要每秒更新或添加100行。
我应该注意哪些其他方面才能获得最佳表现?
答案 0 :(得分:11)
我可以在二进制列上使用索引,我的默认表格排序是latin1 - 默认排序规则吗?
是的,你可以;排序规则仅与字符数据类型相关,而不是二进制数据类型(它定义了字符的排序方式) - 另外,请注意latin1
是字符编码,而不是排序规则。
为了获得高性能,我应该使用哪种索引机制Btree或Hash?我需要每秒更新或添加100行。
请注意,哈希索引仅适用于MEMORY
和NDB
存储引擎,因此您甚至可能无法选择。
无论如何,要么通常能够满足你的性能标准 - 尽管对于这个特定的应用程序我看不到使用B-Tree(有序)的好处,而Hash会提供更好的性能。因此,如果您有选择,您也可以使用Hash。
有关详细信息,请参阅Comparison of B-Tree and Hash Indexes。
我应该采取哪些其他措施来获得最佳表现?
取决于您对“最佳表现”和您的环境的定义。一般来说,请记住Knuth的格言“过早优化是所有邪恶的根源”:也就是说,只有在您知道最简单的方法存在问题时才进行优化。