mysql:15568
From: "Nobuchika.tanaka" <"Nobuchika.tanaka" <tanaka.nobuchika@xxxxxxxxxx>>
Date: Thu, 14 Apr 2011 16:29:32 +0900
Subject: [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という本来検索の対象となるパーティションのみ選択されます。
以上、よろしくお願いいたします。
田中宣親
-> 15568 2011-04-14 16:29 ["Nobuchika.tanaka" <] Partition pruningについて。 15569 2011-04-14 16:43 ┗[Mikiya Okuno <mikiya] 15570 2011-04-15 07:58 ┗["Nobuchika.tanaka" <] 15573 2011-04-15 09:47 ┗[Mikiya Okuno <mikiya]