У меня есть таблица, которая включает многостолбцовый индекс, определенный как
CREATE INDEX tab_a_idx1 ON tab_a USING btree (device, fixtime)
Индекс был выбран намеренно, потому что большинство запросов, выполняемых к этой таблице, включают критерии выбора, подобные этому
WHERE device = 'xyz' AND fixtime > 'sometime' AND fixtime <= 'someothertime' ORDER BY fixtime;
Таблица была сгруппирована по этому индексу в целях повышения производительности.
CLUSTER tab_a USING tab_a_idx1;
На основе комментариев и ответов в предыдущем вопросе Я использовал этот запросчтобы перечислить мои кластеризованные таблицы, индексы, по которым они кластеризованы, и определения этих индексов.
SELECT c.oid, c.relname as tablename, x.relname as indexname, z.indexdef
FROM pg_class c
JOIN pg_index i ON i.indrelid = c.oid
JOIN pg_class x ON i.indexrelid = x.oid
JOIN pg_indexes z ON x.relname = z.indexname
WHERE c.relkind = 'r' AND c.relhasindex AND i.indisclustered
И я использовал таблицу pg_stats , чтобы проверить корреляциюиндексированные столбцы.
В цитируемом ответе говорится, что корреляция, близкая к '1, является хорошей, и чем ниже значение, тем больше кластеризация указывается.
Сразу после кластеризации таблицыкорреляция 1-го поля в индексе (устройство) была низкой (0,008), а 2-го (фиксированное время) относительно высокой (0,994).
- Если эти значения suПредполагается, что он близок к «1», но не означает ли это, что таблица не может (или не должна) быть кластеризована по многостолбцовому индексу?
- Существует несколько версий tab_a (он разделен на время исправления), и я заметил, что значения корреляции, по-видимому, не сильно различаются между кластерной и некластеризованной версиями таблицы.Означает ли это, что нет смысла кластеризовать этот индекс?
Спасибо
ОБНОВЛЕНИЕ - родительская таблица была создана следующим образом ....
CREATE TABLE tab_a
( device CHAR(6),
fixTime TIMESTAMP,
....lots more fields.....
)
PARTITION BY RANGE (fixTime);
Отдельные разделы были созданы следующим образом
CREATE TABLE tab_a_201704 PARTITION OF tab_a FOR VALUES FROM ('2017-04-01' ) TO ( '2017-05-01' )
И индекс, используемый для кластеризации, как этот ....
CREATE INDEX tab_a_201704_idx2 ON tab_a_201704 (device, fixTime);
И команда для создания кластера ....
CLUSTER tab_a_201704 USING tab_a_201704_idx2 ;