パーティション テーブル (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 番目のクエリがパーティション全体をスキャンする理由は誰にもわかります..?