2016-03-23 19 views
3

異なるカテゴリの製品表があるようなシナリオがあります。したがって、クエリはカテゴリに固有です。だから私は、各カテゴリーをそれぞれのカテゴリーとして分けることができれば、パフォーマンスが向上すると思った。キー別のMysqlパーティションには1つのパーティションしか表示されません

DROP TABLE IF EXISTS products; 

CREATE TABLE products (
id int(11) AUTO_INCREMENT, 
pname varchar(11) default '', 
category char(10) default 'general', 
PRIMARY KEY thisKey (id,category) 
) 
PARTITION BY KEY (category) 
; 

2つのカテゴリからデータをロードしました。その2つのパーティションを持っていない理由を

mysql> EXPLAIN PARTITIONS SELECT * FROM products\G 
*************************** 1. row *************************** 
      id: 1 
    select_type: SIMPLE 
     table: products 
    partitions: p0 
     type: ALL 
possible_keys: NULL 
      key: NULL 
     key_len: NULL 
      ref: NULL 
     rows: 3 
     Extra: 

は、誰かが私を助けることができるか、私は、この要件のため、間違ったパーティションの種類を選択しますが、その1つのパーティションのみを示しますか?

答えて

2

キーによってパーティションは(5つのパーティションのために)そのような何かを入れた後、あなたは

PARTITION BY KEY (category) 
PARTITIONS 5; 

、パーティションの数が不足しているあなたは、パーティションを持つ最善の戦略を使用していますか?依存する。

類似した商品数のカテゴリが多数あり、頻繁に追加される新しいカテゴリもあります。 BY KEYまたはBY HASHは良いオプションです。このオプションでは、製品がパーティション数にランダムに分配されます

また、この種のパーティションでは、異なるカテゴリの2つの製品を別々のパーティションハッシュキーは同じになる可能性があります)

カテゴリの数は固定されていますが、各カテゴリの商品数には大きな差があります。たぶんBY LISTはあなたの友人です、あなたはどのカテゴリが各パーティション内に入るのかを選択します。

あなたは比較的少数の製品を持っていますか、またはクエリでいくつかのカテゴリの製品を混在させる必要がありますか?おそらくパーティションは必要ありません。

+0

"また、この種のパーティション(KEYパーティションを参照すると仮定します)では、異なるカテゴリの2つの製品を挿入するという保証はありません(ハッシュキーは同じになる可能性があります)" - >だからmysqlオプティマイザ特定のカテゴリから製品を取得するには、複数のパーティションをスキャンする必要がありますか? – joHN

+1

いいえ、同じカテゴリのすべての製品が同じパーティションに移動します。 3つのパーティションを持つ例:product foo cat A(ハッシュは3、パーティション3)、product bar cat A(ハッシュは3、パーティション3)、product doi cat B(Bハッシュは1、パーティション1) product dei cat C(Cハッシュは3、したがってパーティション3)。 3つのカテゴリでは、2つのパーティションしか使用していません。パーティションは、クエリを実行しているときに常にオーバーヘッドを追加しますが、通常はより小さいインデックスを使用するため、これを補うことができます。 – PerroVerd

関連する問題