Добавление индекса в моей таблице для этого запроса - PullRequest
2 голосов
/ 28 января 2009

У меня есть таблица с 5 миллионами строк, в которую чаще всего попадает определенный запрос. Поэтому я хочу добавить индекс, чтобы ускорить процесс.

Запрос:

SELECT someID 
FROM   someTable 
WHERE 
       myVarChar = @myVarChar AND
       MyBit = 0 AND 
       MyBit2 = 1 AND 
       MyBit3 = 0

Обратите внимание, столбец myVarChar является уникальным.

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

Я использую стандарт SQL Server 2008.

Ответы [ 4 ]

6 голосов
/ 28 января 2009

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

Кроме того, посмотрите на план выполнения для этого запроса, если ваш индекс правильно построен, вы должны увидеть две иконки в представлении плана выполнения: SELECT и поиск индекса.

2 голосов
/ 28 января 2009

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

0 голосов
/ 11 июня 2012

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

SELECT myVarChar ,count(*)
FROM someTable 
GROUP BY myVarChar 
ORDER BY 2 desc

Во-вторых, вы можете использовать create index с этим диалогом:

CREATE UNIQUE INDEX IX_MyIndex 
ON SomeTable (myVarChar, MyBit, MyBit2, MyBit3) 
INCLUDE (SomeID)

Что правильно сказал codemonkey, избегайте создания некластеризованного индекса для значения логического типа. но вы можете попытаться построить индекс с (другое значение типа + логическое значение)

0 голосов
/ 28 января 2009

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

create unique index IX_MyIndex on SomeTable (myVarChar, MyBit, MyBit2, MyBit3) include (SomeID)

Проверьте план выполнения, чтобы убедиться, что вы получаете поиск по индексу без поиска ключа. Если вы видите поиск по ключу, вам может потребоваться изменить или добавить столбцы в ваш индекс или в часть include (). Кроме того, если вы собираетесь выполнять какую-либо сортировку, особенно desc, обязательно добавьте ее в свой индекс.

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