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

Mysql 的一个困惑,求解答

  •  
  •   jsrgqinbin · 2015-12-19 22:01:54 +08:00 · 1600 次点击
    这是一个创建于 1495 天前的主题,其中的信息可能已经有所发展或是发生改变。

    150W 条记录的一个订单表。

    mysql> select * from orders where error_status = 0 AND line_id = 0 limit 1;
    1 row in set (0.01 sec)
    mysql> select * from orders where error_status = 0 AND line_id = 0 and version=3 limit 1; 1 row in set (10.01 sec)

    以上两个查询效率相差太大了, error_status , line_id 都建了索引,就加了一个 version 的条件。

    version 为 tinyint 型的基数比较小,只有 0 , 1 , 2 , 3 这 4 个值。

    尝试 version 添加索引,对查询效率没有提高。

    有人指点下,为啥加了 version 就特别慢

    11 回复  |  直到 2015-12-21 16:03:47 +08:00
    kn007
        1
    kn007   2015-12-19 22:08:57 +08:00
    试试联合索引?
    忘记哪个脚本有索引建立推荐。。。
    msg7086
        2
    msg7086   2015-12-19 22:14:35 +08:00
    后者要用 (error_status, line_id, version) 联合索引。
    billlee
        3
    billlee   2015-12-19 22:45:38 +08:00
    先 EXPLAIN 看一下
    shiny
        4
    shiny   2015-12-19 22:47:01 +08:00
    前一条有没有 Query Cache?先 explain 吧……
    holyghost
        5
    holyghost   2015-12-19 22:51:05 +08:00
    我不太懂,但是感觉 5.6 可以用 index condition pushdown 解决一部分这样的问题。

    求轻打脸。
    lenran
        6
    lenran   2015-12-19 22:55:46 +08:00
    version 字段唯一性不高,不应该创建索引吧
    test1199
        7
    test1199   2015-12-19 23:48:43 +08:00
    语句顺序: version 放前边, 那俩有索引得放后边
    guoer
        8
    guoer   2015-12-20 11:23:37 +08:00 via iPhone
    @test1199 mysql 会自动调整顺序吧
    jsrgqinbin
        9
    jsrgqinbin   2015-12-21 09:06:44 +08:00
    @test1199 试过,效果一样
    jsrgqinbin
        10
    jsrgqinbin   2015-12-21 09:09:56 +08:00
    @billlee 使用的索引以及影响的行数是一样的
    toben
        11
    toben   2015-12-21 16:03:47 +08:00
    感觉只有这 3 个字段的联合索引会变快=.=!
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2141 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 14:43 · PVG 22:43 · LAX 06:43 · JFK 09:43
    ♥ Do have faith in what you're doing.