Индексы базы данных - имеет ли размер таблицы?
-
25-09-2019 - |
Вопрос
То, что я имею в виду: есть ли таблица с 20 столбцами больше от индексации определенного поля (один, который используется в запросах поиска), чем таблица, которая имеет всего 4 столбца?
Также: каков вред в добавлении индекса к полям, с которыми я не буду искать, но мог бы позже в будущем? Есть ли негативное для добавления индексов? Это просто размер, который он занимает на диске, или он может заставить работать медленнее, чтобы добавить ненужные индексы?
извлеченный из комментариев
Я использую Postgres (последняя версия), и у меня есть один стол, который у меня будет много таких запросов типа, и т. Д., Но ценности, несомненно, часто меняются, так как мои клиенты имеют доступ к CRUD. Должен ли я могу идею индексов? Они просто головная боль?
Решение
В таблице с 20 столбцами выигрывают больше от индексации определенного поля (один, который используется в запросах поиска Search-is), чем таблица, которая имеет всего 4 столбца?
Нет, количество столбцов в таблице не имеет никакого подшипника на льготы от индекса.
Индекс исключительно на значении в указанном столбце (и); Это частота значений, которые повлияют на то, сколько увидит ваши запросы. Например, колонна, содержащая логическое значение, является плохим выбором для индексации, потому что это 50/50 шанс, что значение будет одним или другим значением. При разделении 50/50 по всем рядам индекс не сужает поиск определенного ряда.
Каков вред в добавлении индекса в поля, с которыми я не буду искать, но позже в будущем?
Индексы ускоряют только поиск данных, когда их можно использовать, но они отрицательно влияют на скорость операторов вставки / обновления / удаления. Индексы также требуют обслуживания, чтобы сохранить их значение.
Другие советы
Если вы делаете как запросы, вы можете обнаружить, что индексы в любом случае не помогут. Хотя индекс может улучшить этот запрос ...
select * from t23
where whatever like 'SOMETHING%'
/
... Маловероятно, что индекс поможет с любым из этих запросов ...
select * from t23
where whatever like '%SOMETHING%'
/
select * from t23
where whatever like '%SOMETHING'
/
Если у вас есть бесплатные текстовые поля, и ваши пользователи нужны нечеткое совпадение, то вы должны посмотреть на полную текстовую функцию Postgres. Это использует оператор матча, а не понравился, и который требует специального типа индекса. Узнать больше.
Есть GOTCHA, что заключается в том, что полные текстовые индексы более сложны, чем обычные, и Связанные дизайнерские решения не просто. Отказ Также некоторые реализации требуют Дополнительные мероприятия по техническому обслуживанию.