Индексировать таблицу SQL Server для поиска по нескольким столбцам - PullRequest
2 голосов
/ 11 марта 2011

У меня есть таблица с 15 столбцами - все типа int, nvarchar или datetime.Я хочу быть в состоянии найти строки, которые соответствуют значениям в 6 из столбцов nvarchar и 1 из столбцов datetime.Хранимая процедура сделает выбор и вернет строки.У меня вопрос, как мне создать индекс, чтобы выбор был оптимальным?Один индекс на 7 столбцов или 7 отдельных индексов на каждый столбец?Это имеет значение?Имеет ли значение порядок предложений WHERE в выборе для порядка индексированных столбцов?

edit

Может быть полезно узнать, что цель выбора - найти1 или 0 записей.6 столбцов необходимы для определения уникальной записи, а столбец даты и времени используется для поиска этой записи за последние X дней.

edit 2

В настоящее время существуетнет данных в таблице.Цель таблицы - определить, было ли выполнено определенное действие для определенного клиента.Перед каждым действием я буду искать в таблице запись с этими 7 значениями столбца.Если записи нет, я выполню действие и вставлю запись.Если есть запись, я перейду к следующему действию и повторю процесс.

Учитывая, что в эту таблицу будет много вставок, индексы будут часто перестраиваться.

Спасибо!

1 Ответ

2 голосов
/ 11 марта 2011

Редактировать 2: Поскольку вы уточнили свой вопрос, я могу дать более конкретный ответ.

Требуется один индекс с шестью столбцами.

Я все еще немного сбит с толку в отношении столбца datetime. Вы говорите, что шесть столбцов определяют уникальные записи. Если они уникальны для всей таблицы, вам не нужно указывать значение datetime ни в индексе, ни в запросе. Если они уникальны только для определенной даты, вам нужно включить ее как в индекс (всего семь столбцов), так и в запрос.

Индекс из шести / семи столбцов, вероятно, не представляется возможным в качестве кластеризованного индекса (особенно, если вы хотите создать и другие индексы), поэтому, если у вас еще нет кластеризованного индекса, создайте его, предпочтительно на авто -id-колонки. Кластерный индекс должен быть как можно меньше, уникальным и постоянно увеличивающимся, поскольку он влияет на способ хранения таблицы и других индексов.

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

Основываясь на вашем описании, это лучший совет, который я могу вам дать.

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