Может ли кластерный индекс выжить при перемещении в другое табличное пространство? - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть таблица, которая изначально разделена по дням. В конце каждого дня больше записей не будет добавляться в этот раздел, поэтому я кластеризирую индекс, а затем выполняю много обработки и агрегирования чисел в этой таблице (используя кластеризованный индекс):

CLUSTER table_a_20181104 USING table_a_20181104_index1;

Через несколько дней (обычно неделю) я объединяю раздел на один день с большим разделом, который содержит все данные о днях за этот месяц. Я использую этот SQL для достижения этого:

WITH moved_rows AS 
( 
    DELETE FROM table_a_20181104 
    RETURNING * 
) 
INSERT INTO table_a_201811 
SELECT * FROM moved_rows; 

Примерно через месяц или даже больше я меняю табличное пространство, чтобы переместить данные с SSD-диска на обычный магнитный жесткий диск.

ALTER TABLE ... SET TABLESPACE ...

Моя первоначальная кластеризация индекса в конце дня определенно улучшает производительность запросов, выполняемых против него.

Я знаю, что кластеризация является одноразовой командой и должна повторяться, если новые записи добавляются / удаляются.

Мои вопросы:

  • Нужно ли повторять кластеризацию после слияния раздела 'day' с разделом 'month'?
  • Нужно ли повторять кластеризацию после изменения табличного пространства?
  • Нужно ли повторять кластеризацию, если я VACUUM раздел?

1 Ответ

0 голосов
/ 12 ноября 2018
  • Перемещение данных из одного раздела в другой разрушит кластеризацию, поэтому вам потребуется выполнить повторную кластеризацию после нее.

  • ALTER TABLE ... SET TABLESPACE просто скопирует файлы таблиц, как они есть, поэтому кластеризация будет сохранена.

  • VACUUM не перемещает строки, поэтому кластеризация также будет сохранена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...