我在表中有一堆BLOB类型的列。这些列中包含的数据使用MySQL的AES_ENCRYPT()函数加密。其中一些字段正在我正在构建的应用程序的搜索部分中使用。将索引放在经常访问的列上是否值得?我不确定它们是BLOB还是数据本身被加密的事实会使索引变得无用。
编辑:以下是有关我具体案例的更多详情。有一个约10列左右的表,每个BLOB都有。插入此表的每条记录都将使用AES_ENCRYPT()函数进行加密。在我的应用程序的搜索部分,用户将能够键入他们的查询。我接受他们的查询并像SELECT AES_DECRYPT(fname MYSTATICKEY) AS fname FROM some_table
一样解密它,以便我可以使用LIKE子句执行搜索。我很好奇的是索引是否会索引加密数据而不是解密返回的实际数据。我猜测,如果索引仅应用于加密的二进制字符串,那么它根本不会有助于提高性能。我错了吗?
答案 0 :(得分:2)
请注意以下事项:
FULLTEXT
的索引添加到BLOB列(http://dev.mysql.com/doc/refman/5.5/en//fulltext-search.html)因此,IMO,您的猜测是正确的 - 索引无助于您的搜索效果。
请注意,“为加密列编制索引”是一个相当普遍的问题 - 网上很少有关于它的文章。例如(虽然这是相当陈旧的,对于MS SQL,它确实涵盖了一些想法):http://blogs.msdn.com/b/raulga/archive/2006/03/11/549754.aspx
另请参阅:What's the best way to store and yet still index encrypted customer data?(顶部答案链接到我在上面找到的同一篇文章)