2010-03-14 4 views
2

Я пытаюсь изучить оптимизацию SQL-запросов с помощью SQL Server 2005. Однако я не нашел практического примера, где я могу улучшить производительность, просто настроив запрос. Не могли бы вы перечислить некоторые примерные запросы - до и после оптимизации?Оптимизация запросов

Он должен быть настраивать запросы - не добавлять индекс, не делая индекс покрытия, не внося никакого изменения в таблицу. Никакие изменения не должны выполняться на таблице и индексе. [Я понимаю, что показатели важны. Это только для целей обучения]

Было бы здорово, если бы вы могли объяснить использование таблицы temp вместо того, чтобы ссылаться на любые образцы баз данных, такие как adventureworks.

+0

настройка запроса не может быть сделана в изоляции и без учета показателей; За исключением очевидного, как не делать SELECT '*', или использовать IF EXISTS, а не SELECT COUNT ('*') (одинарные кавычки из-за того, как комментарии интерпретируют астерикс) –

+0

Я смотрел именно на такие вещи, как «IF EXISTS». Не могли бы вы перечислить эти очевидные вещи? – Lijo

ответ

1

1) Используя как можно больше JOIN, когда это возможно, в SELECT, UPDATE и DELETE. Когда-то люди перебирают записи (или используют курсоры) для обновления, удаления записей из таблицы, но вы почти всегда можете использовать таблицы JOIN для достижения того же, и это значительно улучшит производительность. Пример here.

2) Вам не нужно использовать временные таблицы, если вы не заработаете в нем какие-либо записи и не выполняете некоторые промежуточные операции над ним и возвращаете результаты. Для этого вам все равно следует использовать Table variables.

3) Если вы не хотите использовать временные таблицы для вышеуказанных причин, потому что вам не нужны промежуточные обновления и т. Д., Но вы по-прежнему хотите использовать набор результатов для дальнейших объединений, попробуйте использовать CTE (Common table expressions). Я знаю, что это может быть не связано с производительностью, но очень полезно для производных таблиц.

4) Как кто-то предложил выше, попробуйте использовать IF EXISTS вместо COUNT, также будет хорошо.

5) Попробуйте использовать имена столбцов вместо * в ваших запросах SELECT, насколько это возможно.

-1

В качестве первого шага к обучению используйте explain по вашим запросам.

+0

Неверные РСУБД - он использует SQL Server 2005, а не MySQL. – roufamatic

+0

Будет ли эквивалент быть ** 'SET SHOWPLAN_ALL ON' **? – kiwicptn

0

Я предлагаю вам читать хорошую книгу, такие как SQL Tuning