为什么我使用分区列了进行查询,但 MYSQL 还是扫描了所有的分区 - V2EX
echo404

为什么我使用分区列了进行查询,但 MYSQL 还是扫描了所有的分区

  •  
  •   echo404 Mar 14, 2019 1577 views
    This topic created in 2617 days ago, the information mentioned may be changed or developed.

    1、背景

    我们一个交易表,数据量比较大(一个星期大概有 2000W 的新数据)。现在老板想让我们对这个表做个分区,增加一下性能。没办法被赶鸭子上架,大概看了一下手册后,以周为单位,按时间设计了这样的分区结构:

    CREATE TABLE t_o2o_dm (
    id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '订单编号',
    device_id int(10) unsigned DEFAULT NULL COMMENT '设备编号',
    dt datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '上传时间',
    PRIMARY KEY (id,dt),
    KEY IDX_DT (dt),
    KEY IDX_DEVICE_ID (device_id),
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC
    PARTITION BY RANGE (YEARWEEK(dt))
    (PARTITION p1 VALUES LESS THAN (201901) ENGINE = InnoDB,
    .......
    PARTITION p52 VALUES LESS THAN (201952) ENGINE = InnoDB,
    PARTITION p53 VALUES LESS THAN MAXVALUE ENGINE = InnoDB);

    2、问题

    第一问题是:在进行测试时,我发现使用这样的查询语句: EXPLAIN PARTITIONS SELECT * FROM t_o2o_dm WHERE dt BETWEEN "2019-03-10 00:00:00" AND "2019-03-10 23:59:59" 竟然无法过滤分区,每次查询都会把所有分区都扫描一次。可是按官网描述优化器应该根据 dt 列直接将查询范围固定到特定的分区才对。下面是这条语句 explain 的执行结果:图片 1

    另一个就是,执行下面这样的查询语句时: SELECT * FROM t_o2o_dm WHERE dt BETWEEN "2019-03-11 00:00:00" AND "2019-03-11 23:59:59" AND device_id = "382414"。查询效率竟然比不分区还慢一倍。 图片 2

    有没有做过表分区的老哥来介绍下经验啊,我百度谷歌找了半天全是几篇一样的文章,都是从 mysql 官方手册和高性能 mysql 上粘过去。很无奈啊

    2 replies    2019-03-14 15:04:23 +08:00
    noe132
        1
    noe132  
       Mar 14, 2019
    dt 有索引吗?
    echo404
        2
    echo404  
    OP
       Mar 14, 2019
    @noe132
    About     Help     Advertise     Blog     API     FAQ     Solana     1012 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 22:30 PVG 06:30 LAX 15:30 JFK 18:30
    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