jamfer
V2EX  ›  问与答

一个 MYSQL 语句加索引的问题

  •  
  •   jamfer · Oct 10, 2017 · 2932 views
    This topic created in 3311 days ago, the information mentioned may be changed or developed.
    EXPLAIN SELECT * FROM A WHERE a=0 AND b='hk' ORDER BY c DESC

    如上,很简单的 SQL 语句,表 A 大约有 30 万条数据。

    我给 a 字段和 b 字段都加了 index 索引。但结果返回的行数还是太多( 10 万行)导致查询缓慢。有没有更好的优化办法
    15 replies  •  2017-10-10 21:43:18 +08:00
    qiayue
    qiayue
    Oct 10, 2017
    1
    c 也要
    jamfer
    jamfer
    OP
    Oct 10, 2017
    2
    @qiayue 试了给 c 也加上,还是一样 10 万行
    Ison
    Ison
    Oct 10, 2017
    3
    查询缓慢的原因是匹配的项目多
    重点在于在查询过程尽早缩小查询匹配项目的范围
    如果你本来的匹配目标就多那再优化也没用
    如果你匹配目标少但现在返回的多
    那就把多缩小范围最有效的过滤条件提前
    tabris17
    tabris17
    Oct 10, 2017
    4
    什么叫“ a 字段和 b 字段都加了 index 索引”

    你这应该加联合索引才行啊
    jamfer
    jamfer
    OP
    Oct 10, 2017
    5
    @tabris17 联合索引结果也是一样...
    tabris17
    tabris17
    Oct 10, 2017
    6
    『返回…… 10 万行……导致查询缓慢』

    我还能说啥呢
    armoni
    armoni
    Oct 10, 2017
    7
    10 万行 光数据量就多大了, 你这种情况如果是页面查询就做分页,如果是拿出来计算就另外想办法吧
    jamfer
    jamfer
    OP
    Oct 10, 2017
    8
    @tabris17
    @armoni Sorry 我没说清楚,是有 limit x,30 的。
    mitoop
    mitoop
    Oct 10, 2017
    9
    a 或者 b 这个列的区分度不够吧
    vindurriel
    vindurriel
    Oct 10, 2017
    10
    mysql 每次只能用一个索引,因此需要 联合索引 (a,b,c) 。如果(a,b) 区分度够大的话只索引(a,b)也可以,不过 order by c 的过程就得排序了
    select * 真的有必要吗?用索引查出 id 列表之后再去主键索引找完整的数据行(假定引擎是 innodb ),会增加很多随机读。
    ToTChowChow
    ToTChowChow
    Oct 10, 2017
    11
    如果有主键 ID 的话,可以先 select id from ...,
    然后再根据 id 获取数据
    mooncakejs
    mooncakejs
    Oct 10, 2017 via iPhone
    12
    limit 10w,30 不管什么索引都慢的。
    jamfer
    jamfer
    OP
    Oct 10, 2017
    13
    @mooncakejs 可是现在 1,30 都卡的要死...
    gzxultra
    gzxultra
    Oct 10, 2017
    14
    你倒是把建好的索引和 explain 的结果贴上来啊...
    Lonely
    Lonely
    Oct 10, 2017 via iPhone
    15
    show index 的结果贴一下
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3915 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 01:01 · PVG 09:01 · LAX 17:01 · JFK 20:01
    ♥ Do have faith in what you're doing.