Есть таблица запросы к которой идут по 4 разным полям
Иногда запросы идут только по одному из полей, иногда по двум (имею ввиду по одному или двум полям в запросе после WHERE)
Значение полей на которые хочу создать индекс не меняются после добавления, а соседние поля на которые индекс не нужен меняются часто.
Как лучше сделать, просто создать индекс на все 4 поля или лучше разделить данные на несколько таблиц ?
Слишком многое зависит от
Слишком многое зависит от таблицы и запросов, чтобы дать однозначный ответ.
Советую прогнать запросы с EXPLAIN и посмотреть планы запросов.
А так в общем случае вполне достаточно одного составного индекса на все четыре поля.
А не в общем случае, надо либо строить отдельные индексы по каждому полю, либо для каких-то полей строит отдельные индексы, а для каких-то составные из тех что используются в запросе.
Спасибо за ответ, EXPLAIN
Спасибо за ответ, EXPLAIN пока слишком сложно проанализировать
Один составной индекс на все 4 поля ок понял, но думаю лучший вариант, если все правильно понял такой
нужно просто взять все используемые запросы и построить индексы так как они идут в запросе
то есть к примеру у меня 4 запроса
1) Используеться только поле1
2) Используеться поле1 и поле2
3) Используеться поле1 и поле3
4) Используеться поле1 и поле4
Делаю 4 индекса,
1) только на поле1
2) на поле1 и поле2
3) на поле1 и поле3
4) поле1 и поле4
и при запросе постгрес сам определит какой из 4 индексов ему использовать ?
или помтгрес так не работает и будет только хуже ?
В общем случае, мыслите
В общем случае, мыслите верно. Но как я уже говорил, всё зависит от запросов и таблиц. В каких-то случаях индексы наоборот могут замедлить работу, вместо ускорения. Поэтому и нужен EXPLAIN.
По EXPLAIN понятно как
По EXPLAIN понятно как разберусь обязательно сделаю.
Но я хочу понять если я создам 4 индекса, и как я написал там будет в каждом повторяться поле1
постгрес сам сможет выбрать в зависимости от запроса какой индекс лучше использовать ?
Если бы СУБД всегда могла
Если бы СУБД всегда могла выбрать лучший вариант, зачем были бы нужны мы, администраторы СУБД?
В каких-то случаях автоматика справляется, в каких-то нет. Как я уже говорил, многое зависит от таблиц и запросов.