InnoDB不支持hash索引,怎么破?

2013-07-30 15:26:31 +08:00
 leonwong
RT,有些字段例如保存用户密码的无序的MD5字段我觉得很有必要使用hash索引,但是InnDB不支持hash,如果换成MyISAM又不支持事务,怎么破,不过据说InnoDB有自适应hash索引,不知道效果如何?懂的人麻烦吱声下,谢谢啦
8651 次点击
所在节点    MySQL
19 条回复
holystrike
2013-07-30 15:39:55 +08:00
密码字段为什么需要建索引呢?
0bit
2013-07-30 15:44:34 +08:00
很好破,一劳永逸,用PostgreSQL
leonwong
2013-07-31 07:48:32 +08:00
@holystrike 因为where子句后接密码字段,而且无序排列,索引查找应该会更快定位
leonwong
2013-07-31 08:05:26 +08:00
@0bit 转换数据库系统成本可能会有点高
Actrace
2013-07-31 08:21:51 +08:00
我有个库1.8T的数据(3000W+数据),里面用32char的MD5做唯一性索引,现在的响应速度是1秒内。
GTim
2013-07-31 09:58:56 +08:00
XX 密码字段带入查询,汗啊
coderliss
2013-07-31 10:48:54 +08:00
汗,古怪的需求就是这样子来的。
zhicheng
2013-07-31 11:18:28 +08:00
@Actrace MD5 建议用 binary(16)
jimrok
2013-07-31 12:31:56 +08:00
你把md5带入sql,一旦被sql注入,你就糗大了。
leonwong
2013-07-31 14:13:11 +08:00
@Actrace 谢谢提供数据参考
leonwong
2013-07-31 14:14:00 +08:00
@jimrok 那该如何解决
xlogion
2013-07-31 14:18:01 +08:00
@leonwong 完全可以按照用户名查询用户,然后对比结果的密码字段,没必要带着密码字段一同查询
jimrok
2013-07-31 14:19:51 +08:00
@leonwong select users.password_hash,users.salt from users where users.email = 'login_email'

if (users.password == 'your hash string' then
leonwong
2013-07-31 14:21:46 +08:00
@xlogion 懂你们意思了,谢谢
leonwong
2013-07-31 14:22:01 +08:00
@jimrok 懂你意思了,万分感谢
rwx
2013-07-31 14:22:01 +08:00
为什么WHERE查询里会有密码做为条件?难道连比较密码这种事情也要数据库帮做么。。

让我想起以前见过的一个项目,php的全部作用就是根据路由参数向数据库做一个查询,所有的业务逻辑都写成存储过程由数据库执行。。
leonwong
2013-07-31 14:23:22 +08:00
@rwx 我是没有想过sql注入这个东西
coderliss
2013-08-02 16:24:26 +08:00
@leonwong 注入只是问题之一,多一个字段多一点风险罢了。
首先是不利于扩展,怎么区分用户不存在,和用户密码错误这两种情况?
其二是建索引影响插入性能,没必要的性能浪费
jasontse
2013-08-02 16:37:06 +08:00
想起了1' or 1=1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/77428

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX