Индексы базы данных - имеет ли значение размер таблицы? - PullRequest
1 голос
/ 17 ноября 2010

Что я имею в виду: имеет ли таблица с 20 столбцами большую выгоду от индексации определенного поля (того, которое используется в запросах поиска), чем для таблицы с 4 столбцами?

Кроме того: что вредного в добавлении индекса к полям, по которым я не часто ищу, но возможно в будущем? Есть ли минус в добавлении индексов? Это просто размер, который он занимает на диске, или он может замедлять работу, добавляя ненужные индексы?

извлечено из комментария

Я использую Postgres (последняя версия), и у меня есть одна таблица, в которой я буду выполнять множество запросов типа LIKE и т. Д., Но значения, несомненно, будут часто меняться, поскольку мои клиенты имеют доступ к CRUD. Должен ли я понять идею индексов? Они просто головная боль?

Ответы [ 2 ]

5 голосов
/ 17 ноября 2010

Может ли таблица с 20 столбцами получить большую выгоду от индексации определенного поля (того, которое используется в запросах поиска), чем таблица с 4 столбцами?

Нет, числостолбцов в таблице не имеет никакого отношения к преимуществам наличия индекса.

Индекс основан исключительно на значениях в указанных столбцах;Частота значений будет влиять на то, насколько полезными будут ваши запросы.Например, столбец, содержащий логическое значение, является плохим выбором для индексации, поскольку при вероятности 50/50 это будет одно или другое значение.При разбивке 50/50 по всем строкам индекс не сужает поиск конкретной строки.

В чем вред при добавлении индекса в поля, в которых я не ищу много, но может быть позже?

Индексы только ускоряют извлечение данных, когда они могут быть использованы, но они отрицательно влияют на скорость операторов INSERT / UPDATE / DELETE.Индексы также требуют обслуживания, чтобы сохранить их значение.

1 голос
/ 17 ноября 2010

Если вы делаете запросы типа LIKE, вы можете обнаружить, что индексы не очень помогают в любом случае. Хотя индекс может улучшить этот запрос ...

select * from t23
where whatever like 'SOMETHING%'
/

... маловероятно, что индекс поможет с любым из этих запросов ...

select * from t23
where whatever like '%SOMETHING%'
/

select * from t23
where whatever like '%SOMETHING'
/

Если у вас есть свободные текстовые поля, и ваши пользователи нуждаются в нечетком сопоставлении, вам следует ознакомиться с полнотекстовой функциональностью Postgres. При этом используется оператор MATCH, а не LIKE, для которого требуется специальный тип индекса. Узнайте больше.

Существует ошибка, которая заключается в том, что полнотекстовые индексы более сложны, чем обычные, и связанные с решения по проектированию не просты . Также некоторые реализации требуют дополнительных действий по обслуживанию .

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