[前][次][番号順一覧][スレッド一覧]

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]