異なるカテゴリの製品表があるようなシナリオがあります。したがって、クエリはカテゴリに固有です。だから私は、各カテゴリーをそれぞれのカテゴリーとして分けることができれば、パフォーマンスが向上すると思った。キー別の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つのパーティションのみを示しますか?
"また、この種のパーティション(KEYパーティションを参照すると仮定します)では、異なるカテゴリの2つの製品を挿入するという保証はありません(ハッシュキーは同じになる可能性があります)" - >だからmysqlオプティマイザ特定のカテゴリから製品を取得するには、複数のパーティションをスキャンする必要がありますか? – joHN
いいえ、同じカテゴリのすべての製品が同じパーティションに移動します。 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