Ответ 1
Он должен переместить их при обновлении. Если бы это не так, это не сработало бы хорошо. 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)
Ясно, что сразу после обновления известно, что строка теперь находится в разделе p2.