1

パーティション テーブル (MySQL データベース) からのデータの取得に関する一般的な質問が 1 つあります。

テーブルの年範囲でパーティション化しました。また、パーティション化された列にインデックスを付けました。

PARTITION BY RANGE (YEAR(`RDATE`))
(PARTITION pp0 VALUES LESS THAN (0) ENGINE = MyISAM,
 PARTITION p0 VALUES LESS THAN (2000) ENGINE = MyISAM,
 PARTITION p1 VALUES LESS THAN (2005) ENGINE = MyISAM,
 PARTITION p2 VALUES LESS THAN (2008) ENGINE = MyISAM,
 PARTITION p3 VALUES LESS THAN (2010) ENGINE = MyISAM,
 PARTITION p4 VALUES LESS THAN (2011) ENGINE = MyISAM,
 PARTITION p5 VALUES LESS THAN (2012) ENGINE = MyISAM,
 PARTITION p6 VALUES LESS THAN (2013) ENGINE = MyISAM,
 PARTITION p7 VALUES LESS THAN (2014) ENGINE = MyISAM,
 PARTITION p8 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */

以下のクエリの実行中に..

explain partitions select Products from salesdata where rdate between '2011-11-01' and LAST_DAY('2011-11-01')

結果は次のようになります(合計2502行がスキャンされました..)

id    select_type    table      partitions    type     possible_keys    key      key_len    ref    rows    Extra      
1     SIMPLE         sldata    p5            range    sls_ind     sls_ind    3                 2502    Using where

しかし、このクエリを実行すると..

 explain partitions select Products from salesdata where rdate between '2011-12-01' and LAST_DAY('2011-12-01')

結果は(合計55181行がスキャンされました..)

id    select_type    table      partitions    type    possible_keys    key    key_len    ref    rows     Extra      
1     SIMPLE         sldata    p5            ALL     sls_ind                              55181    Using where

最初のクエリとは異なり、2 番目のクエリがパーティション全体をスキャンする理由は誰にもわかります..?

4

0 に答える 0