Kat*_*tai 13 mysql performance partitioning
我正在越来越深入地探索MySQL功能,而我正在尝试的下一个是表分区
基本上只有一个关于他们的问题,我还没有找到一个明确的答案:
如果更新一行,如果满足另一个分区的分区条件,该行是否会自动移动到另一个分区?(例如,如果分区按区域分割,则区域从区域A更改为区域B)
如果这不是自动发生的,我需要做什么才能将行从分区A移动到分区B?(并且会因此而受到性能影响吗?)
我想做的是将'删除'(标志)信息移动到表的单独分区中,因为很少会调用它们.这通常是一个好主意,还是将所有内容放在同一个(可能是某天巨大的 - 数百万行)表中会更好?
And*_*and 20
它必须在更新时移动它们.如果没有,它将无法正常工作.MySQL必须基本扫描每个查询的所有分区,因为它无法知道存储的记录位置.
我也做了一些测试(在MySQL 5.6上,因为这是第一个可以指定要查询的分区的版本)
CREATE TABLE test (
id int
)
PARTITION BY RANGE (id) (
PARTITION p1 VALUES LESS THAN (1000),
PARTITION p2 VALUES LESS THAN MAXVALUE);
INSERT INTO test VALUES (1); -- now on partition p1
SELECT * FROM test PARTITION(p1);
+------+
| id |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
SELECT * FROM test PARTITION(p2);
Empty set (0.00 sec)
UPDATE test SET id = 1001; -- now on partition p2
SELECT * FROM test PARTITION (p1);
Empty set (0.00 sec)
SELECT * FROM test PARTITION (p2);
+------+
| id |
+------+
| 1001 |
+------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
很明显,它在更新后立即知道该行现在位于分区p2上.
| 归档时间: |
|
| 查看次数: |
3558 次 |
| 最近记录: |