SQL Server 2005 Slow Query с объединениями и упорядочением по - PullRequest
0 голосов
/ 25 февраля 2011

У меня медленный запрос в SQL Server 2005. Он имеет 3 внутренних объединения (для таблиц с несколькими десятками тысяч строк в одну с миллионом строк) и предложение order by.

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

Полагаю, что добавление индекса к столбцам «действующий как внешний ключ» очень поможет.

Какие другие варианты можно использовать для оптимизации этого запроса?

Примечание. Кажется, что у моей базы данных есть узкое место в ЦП, разумно ли думать, что этот запрос (который часто выполняется) может вызвать его? БД составляет всего около 2 ГБ, а у меня 4 ГБ оперативной памяти, поэтому я сомневаюсь, что есть много проблем ввода-вывода. Будет ли заказ поедать процессор?

Ответы [ 2 ]

2 голосов
/ 25 февраля 2011

Вам нужно проиндексировать ваши ключи соединения!Если вы объединяете несколько полей, добавьте закрывающие индексы, которые охватывают все эти поля (в том же порядке, в котором они находятся в запросе).Это, вероятно, решит 90% проблем с производительностью.

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

0 голосов
/ 25 февраля 2011

Если ваши объединения являются внутренними, вы можете создать индексированное представление. Это даст вам производительность во время выполнения, как если бы не было никаких объединений и никакой сортировки вообще. Это не становится быстрее, чем это (за счет дискового пространства). Если ваши объединения являются внешними объединениями, существует обходной путь: вставьте фиктивную строку, которая служит «нулевым» значением, и переключитесь на внутренние объединения.

Как указал JNK, все еще важно индексировать столбцы внешнего ключа. Маловероятно, хотя возможно, что вам вообще не удастся их проиндексировать.

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