InnoDB不支持hash索引,怎么破? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
leonwong
V2EX    MySQL

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

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

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

    让我想起以前见过的一个项目,php的全部作用就是根据路由参数向数据库做一个查询,所有的业务逻辑都写成存储过程由数据库执行。。
    leonwong
        17
    leonwong  
    OP
       2013-07-31 14:23:22 +08:00
    @rwx 我是没有想过sql注入这个东西
    coderliss
        18
    coderliss  
       2013-08-02 16:24:26 +08:00   1
    @leonwong 注入只是问题之一,多一个字段多一点风险罢了。
    首先是不利于扩展,怎么区分用户不存在,和用户密码错误这两种情况?
    其二是建索引影响插入性能,没必要的性能浪费
    jasontse
        19
    jasontse  
       2013-08-02 16:37:06 +08:00 via iPad   1
    想起了1' or 1=1
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     869 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 22:46 PVG 06:46 LAX 14:46 JFK 17:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86