SQL Server: для 3 столбцов разница между «один индекс на столбец» / «один индекс для всех» - PullRequest
1 голос
/ 09 марта 2012

Я настраиваю простую таблицу в SQL Server. Он называется «LOG» и, как вы можете ожидать, он используется для записи журналов, для последующего мониторинга / поиска / группировки использования различных приложений различными способами.

Таблица объявлена ​​примерно так (простой синтаксис):

LOG {
   user   varchar(8),
   timestamp  datetime,
   appname   varchar(16)
}
primary key(user,timestamp,appname)

Должен ли я индексировать каждый столбец в отдельном индексе? Все три в одном индексе? Кластеризованный / некластеризованный?

Я был бы рад видеть, какую логику / знания вы применили бы здесь.

1 Ответ

2 голосов
/ 13 марта 2012

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

Кроме того, я предполагаю, что timestamp будет последовательным, что сделает вставку новых данных в кластеризованный индекс менее дорогой, чем при случайном распределении вставляемых данных.

Не похоже, что вы будете искать по user или appname, поэтому я не рекомендую добавлять индексы к этим столбцам, если вы не планируете объединять эти значения или использовать их в своем where предложение где-то в будущем.

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

Например, если ваш индекс (user, timestamp, appname), но вы ищете только по timestamp и appname, этот индекс не будет использоваться.Поэтому очень важно учитывать, как будут запрашиваться данные при создании ваших индексов.

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