V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
esolve
V2EX  ›  问与答

mysql 中的 where 语句有 and 的话,单列索引不起作用?

  •  
  •   esolve · 2017-09-30 16:13:30 +08:00 · 3645 次点击
    这是一个创建于 2405 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如

    select * from table where name="apple" and count=3;
    

    如果仅仅对 name 做单列索引,而没有联合索引,我用 explain 发现没有用到索引

    这是怎么回事?

    11 条回复    2017-09-30 18:45:47 +08:00
    b821025551b
        1
    b821025551b  
       2017-09-30 16:30:31 +08:00
    灌进去一千万条数据再试一下。
    xinyewdz
        2
    xinyewdz  
       2017-09-30 16:33:18 +08:00
    mysql 引擎认为全表扫描比使用索引还快,放弃使用索引
    huigeer
        3
    huigeer  
       2017-09-30 16:34:10 +08:00
    灌进去 2 千万再试试吧
    esolve
        4
    esolve  
    OP
       2017-09-30 16:38:30 +08:00
    @b821025551b 目前 5 百多万数据啊,这还不够啊
    miniyao
        5
    miniyao  
       2017-09-30 17:06:22 +08:00
    @xinyewdz 你这是开玩笑?还是 mysql 真有这么根据查询速度,取舍索引的做法?
    huigeer
        6
    huigeer  
       2017-09-30 17:12:07 +08:00
    @miniyao mysql 确实会这样的, 它是根据扫描的数据量。
    nandaye
        7
    nandaye  
       2017-09-30 17:41:55 +08:00 via Android
    如果数据量大且索引出来的量小,那可能是使用了错误的以前的执行逻辑,执行相同的语句数据库不是每次都会取样估计表的数据量,他会使用上次它判断的最优的执行逻辑。
    akira
        8
    akira  
       2017-09-30 18:06:55 +08:00
    @miniyao 对的。
    如果觉得 mysql 没有正确使用索引,那么可以在 sql 里面指定使用什么索引
    cevincheung
        9
    cevincheung  
       2017-09-30 18:13:31 +08:00
    @miniyao #5 看 postgresql 的查询计划会更无语的。
    miniyao
        10
    miniyao  
       2017-09-30 18:20:56 +08:00 via Android
    @huigeer
    @akira
    @cevincheung

    嗯,谢谢,有空去测试观察下😜
    feiyuanqiu
        11
    feiyuanqiu  
       2017-09-30 18:45:47 +08:00 via Android
    想强制使用索引的话,在查询语句里加上 force index
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2183 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 04:59 · PVG 12:59 · LAX 21:59 · JFK 00:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.