我有一个场景,比如我有一个包含不同类别的产品表。因此查询将特定于类别。所以我想如果我可以将每个类别分开作为每个分区,它将提高性能。
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)
;
我从两个类别加载数据。但它只显示一个分区:
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:
有人可以帮助我为什么没有两个分区,或者我为这个要求选择了错误的分区类型?
答案 0 :(得分:2)
在按分区键分区后(对于5个分区)
,您缺少分区数PARTITION BY KEY (category)
PARTITIONS 5;
您使用分区的最佳策略吗?取决于。
您有很多具有相似产品数量的类别,并且还经常添加新类别。 BY KEY或BY HASH是不错的选择,使用此选项,产品将在分区数量上随机分布
另外,对于这种分区,你没有保证插入两个不同类别的产品,它们进入不同的分区(散列键可能是相同的)
您拥有固定数量的类别,每个类别的产品数量之间存在很大差异。可能BY LIST是你的朋友,你选择哪个类别进入每个分区。
您是否拥有相对较少数量的产品,或者您需要在查询中混合多个类别的产品?可能你不需要分区。