Подтвердить что ты не робот

Разделы и ОБНОВЛЕНИЕ

Я погружаюсь глубже и глубже в функции MySQL, а следующий, который я пробовал, - это разделы таблицы

В основном у них только один вопрос, где я еще не нашел четкого ответа:

Если вы ОБНОВЛЯЕТ строку, будет ли строка перемещена в другой раздел автоматически, если условия раздела другого раздела выполнены? (если, например, разделы разделены по регионам, а область изменяется от области A до области B)

И если это не происходит автоматически, что мне нужно сделать, чтобы переместить строку из раздела A в раздел B? (и будет ли это удар производительности?)

То, что я хотел бы сделать, состоит в том, чтобы переместить информацию о "удалении" (флагов) в отдельный раздел таблицы, поскольку они редко вызываются. Будет ли это обычно хорошей идеей или было бы лучше оставить все в одной таблице (возможно, когда-нибудь огромной - несколько миллионов строк)?

4b9b3361

Ответ 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.