Размещение индексов во всех столбцах таблицы только для чтения - PullRequest
0 голосов
/ 25 июля 2011

У меня есть таблица в базе данных, которая будет сгенерирована с самого начала и, вероятно, никогда не будет записана снова. Даже если он когда-либо был записан, он будет в форме пакетных процессов, запускаемых во время выпуска, и время записи вообще не важно.

Это относительно большая таблица, содержащая около 80 тыс. Строк и, возможно, около 10-12 столбцов.

Приложение может получать данные из этой таблицы часто.

Я думал, так как это никогда не будет записано снова, я должен просто поместить индексы во все столбцы? Таким образом, всегда будет быстро читать независимо от того, какой тип запроса я формирую?

Это хорошая идея? Есть ли у этого недостатка, о котором я должен знать?

Ответы [ 3 ]

0 голосов
/ 25 июля 2011

Это будет зависеть от таблицы. Если в критериях поиска будут использоваться все столбцы, то нет ничего лишнего в том, чтобы на них ставить индексы. Это довольно маловероятно, хотя. Кроме того, могут существовать составные (с несколькими столбцами) индексы, которые будут более полезными, чем некоторые из простых (с одним столбцом) индексов.

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

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

0 голосов
/ 25 июля 2011

Выбор индексов для таблицы на основе запросов, которые вы выполняете к этой таблице.

Индексы, которые вам никогда не нужны для какого-либо запроса, - это просто пустое пространство.

Отдельные индексыдля каждого столбца не полный набор возможных индексов.Вы также можете создавать многостолбцовые индексы (то есть составные индексы), и они могут быть важны для оптимизации определенных запросов.Порядок столбцов в составном индексе имеет значение.

SQL Server 2008 поддерживает только 999 некластеризованных индексов на таблицу, поэтому, если вы попытаетесь создать все возможные индексы для таблицы из более чем нескольких столбцов, вы получитеlimit.

Извините, но вам действительно нужно изучить некоторые вещи, прежде чем вы сможете эффективно оптимизировать.Если бы это было просто вопросом индексации каждого столбца, тогда СУБД сделала бы это по умолчанию.

0 голосов
/ 25 июля 2011

Насколько я понимаю, каждый индекс требует некоторого (относительно небольшого) объема памяти. Если вам не хватает места, это может иметь значение. Какое влияние это может оказать, может зависеть от того, какую БД вы используете.

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