mysql:15570
From: "Nobuchika.tanaka" <"Nobuchika.tanaka" <tanaka.nobuchika@xxxxxxxxxx>>
Date: Fri, 15 Apr 2011 07:58:12 +0900
Subject: [mysql 15570] Re: Partition pruningについて。
田中です。 ご説明いただいた仕様にて、なぜ先頭のパーティションも 選択されれるのかを理解することが出来ました。 いただいた情報を基にインターネットをj検索した所、 海外のフォーラムにて、同じ内容がすでに議論されている事がわかりました。 Re: Partition Pruning http://forums.mysql.com/read.php?106,386051,387925#msg-387925 奥野さんからご指摘いただいた通り、TO_DAYS()が単調写像ではなく NULLを返す可能性があるため、NULLのデータが保存される 先頭のパーティションも選択されるとの事です。 対策としては、RANGE COLUMNSパーティショニングを使う事にしました。 この方法であれば、TO_DAYS()関数を使用しないので、 先頭のパーティションが選択されなくなりました。 ○パーティションの設定方法 PARTITION BY RANGE COLUMNS(end_time_date) ( PARTITION p_2002_8_5 VALUES LESS THAN ('2002-8-12'), PARTITION p_2002_8_12 VALUES LESS THAN ('2002-8-19'), PARTITION p_2002_8_19 VALUES LESS THAN ('2002-8-26'), #中略 PARTITION p_2022_2_28 VALUES LESS THAN ('2022-3-7'), PARTITION p_2022_3_7 VALUES LESS THAN ('2022-3-14'), PARTITION p_maxvalue VALUES LESS THAN maxvalue ); ○Partition pruning動作確認 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_2011_3_28 type: ALL possible_keys: end_time_date_idx key: NULL key_len: NULL ref: NULL rows: 266901 Extra: Using where ※p_2011_3_28という本来検索の対象となるパーティションのみ選択されるようになりました。 これにて、無事問題が解決いたしました。 アドバイスありがとうございました。 田中宣親 (2011/04/14 16:43), Mikiya Okuno wrote: > 奥野です。 > > この挙動はMySQLの仕様です。 > > MySQLのパーティショニングでは、評価式の結果がNULLになった場合、 > 先頭のパーティションにレコードが格納されます。 > TO_DAYS()はzero date(月や日が0の日付)などを入力すると > NULLを出力するのですが、WHERE句の条件ではzero dateが含まれるかどうか > までは分かりませんので、評価式の結果がNULLとなる可能性が否定できません。 > そのため、評価式の結果がNULLとなるレコードが格納されている先頭の > パーティションもSELECTの対象になるのです。 > > 対策として、先頭に空のパーティションを設定しておくことをおすすめいたします。 > (コマンドはALTER TABLE ... REORGANIZE PARTITION ...です。) > VALUES LESS THANの値を極端に小さくしておけば、そのパーティションには > レコードが含まれませんので、SELECTをしてもパフォーマンスの > オーバーヘッドは生じません。 > > ではでは。 > -- > 奥野 幹也 > http://www.google.com/profiles/mikiya.okuno > http://nippondanji.blogspot.com/ > http://twitter.com/nippondanji > > > > On 04/14/2011 04:29 PM, Nobuchika.tanaka wrote: > >> 田中(たなか)と申します。 >> >> パーティショニングをしたテーブルから、特定のパーティションにあるデータを >> 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]