2015-06-02 8 views
1

Я занимаюсь секционированием в своем postgres db. Корневая таблица похожа на kpis_weekly (date, personid, metric, value), а таблица разделов - kpis_weekly_yyyymmdd, наследуемая от таблицы kpis_weekly. Я установил первичный ключ дочерней таблицы (personid, metric), поскольку дата всегда одинакова в той же таблице разделов.Должен ли индекс включать столбец «константа»?

Правильно ли это? Или я должен создать первичный ключ (date, personid, metric), хотя дата является константой внутри той же таблицы разделов.

Запросы, которые мы обычно работают на этой таблице, как:

select * 
from kpis_weekly 
where date = '2011-02-20' 
and personid = 50 

select * 
from kpis_weekly 
where date = '2011-02-20' 
and metric = 'centrality' 
and personid in (50, 82, 10, 14, 22, 36) 
+0

Очень хороший вопрос. Я не изучал влияние добавления третьего столбца в индекс дерева b, где этот столбец является единственным постоянным значением. –

ответ

0

Если пара PersonId - метрика единственна, то да, это лучше иметь первичный ключ на основе этих двух столбцов. В любом случае первичный ключ главной таблицы не может быть распространен на дочерние таблицы, поэтому включение даты в ключ бесполезно.

+0

при создании индекса. рассмотрим, что первый элемент индекса имеет столбец с менее разнообразными значениями. Если я правильно понял, это должно быть метрическим, то тогда – onerror

Смежные вопросы