首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql性能问题:MD5(值)

MySql性能问题:MD5(值)
EN

Stack Overflow用户
提问于 2009-12-17 12:34:15
回答 4查看 3.1K关注 0票数 3

为了安全起见,我这样做了一些查询:

代码语言:javascript
复制
SELECT avatar_data FROM users WHERE MD5(ID) ='md5value'

举个例子,我有这样的条目:

代码语言:javascript
复制
-TABLE.users-
ID | avatar_data
39 | some-data

我执行以下查询:

代码语言:javascript
复制
SELECT avatar_data FROM users WHERE MD5(ID) ='d67d8ab4f4c10bf22aa353e27879133c'

'd67d8ab4f4c10bf22aa353e27879133c'是由MD5过滤的'39'值。

我有一个非常大的数据库,里面有很多条目。我想知道这种方法是否会影响数据库的性能?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-12-17 18:30:40

因为要对要搜索的列使用函数( MD5(ID)= ),所以MySQL必须执行全表扫描。

虽然我不确定执行这样的搜索的原因,但为了加快速度,我可以建议您添加另一个包含处理过的ID数据的列,并对其进行索引。

所以你应该这样做:

SELECT * FROM user WHERE MD5_ID = 'd67d8ab4f4c10bf22aa353e27879133c'

票数 5
EN

Stack Overflow用户

发布于 2009-12-17 12:37:34

使用该查询而不使用函数索引,是的,您将对整个过程进行表扫描。如果您经常这样做,您可能希望直接将摘要预先计算到代理表或另一个列、索引和查找中。

票数 2
EN

Stack Overflow用户

发布于 2009-12-17 12:44:59

是的,这可能会变得非常慢,而且它真的不会增加任何安全性。'39‘的MD5很容易理解。要使单向哈希成功,它需要包含攻击者未知的值。否则,攻击者只会散列该值,而您并没有真正完成任何事情。

你可以考虑发布更多关于你正在做的事情。例如:这是一个web管理工具吗?有密码保护吗?等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1919486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档