2011年4月14日

[mysql 15568] Partition pruningについて。

田中(たなか)と申します。

パーティショニングをしたテーブルから、特定のパーティションにあるデータを
selectする際、
特定のパーティション以外のパーティションも選択され困っております。
特定のパーティションのみ選択され方法をご存知の方がいましたら、
アドバイスをお願いいたします。

○環境
 −MySQL:5.5.8
 −OS:Redhat5.5

○パーティションの設定方法
 −end_time_date(Date型のカラム)を基準に、1週間毎のデータのパーティショ
ンを1024個を設定。

PARTITION BY RANGE (to_days(end_time_date)) (
PARTITION p_2002_8_5 VALUES LESS THAN (to_days('2002_8_12')),
PARTITION p_2002_8_12 VALUES LESS THAN (to_days('2002_8_19')),
PARTITION p_2002_8_19 VALUES LESS THAN (to_days('2002_8_26')),
 #中略
PARTITION p_2022_2_28 VALUES LESS THAN (to_days('2022_3_7')),
PARTITION p_2022_3_7 VALUES LESS THAN (to_days('2022_3_14')),
PARTITION p_maxvalue VALUES LESS THAN maxvalue
);

○Partition pruning動作確認
 −2011/03/28から2011/04/03の1週分のデータをselectする際に対象となる
パーティションを確認

use development;

explain partitions

select
*
from
t1
where
end_time_date >= '2011-03-28' and
end_time_date < '2011-04-03' \G

*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t1
partitions: p_2002_8_5,p_2011_3_28
type: ALL
possible_keys: end_time_date_idx
key: NULL
key_len: NULL
ref: NULL
rows: 266901
Extra: Using where

※p_2002_8_5という本来検索の対象とならないパーティションが選択されています。

ただし、where句の条件を範囲指定にしない場合、正しくパーティションが選択
されます。

use development;

explain partitions

select
*
from
t1
where
end_time_date = '2011-04-01' \G

*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: job
partitions: p_2011_3_28
type: ref
possible_keys: end_time_date_idx
key: end_time_date_idx
key_len: 3
ref: const
rows: 36421
Extra:

※p_2011_3_28という本来検索の対象となるパーティションのみ選択されます。

以上、よろしくお願いいたします。

田中宣親


投稿者 xml-rpc : 2011年4月14日 16:29
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/103157
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。