Общие способы оптимизации в SQL
- Указывать конкретные поля для извлечения в запросах
Избегайте select *, старайтесь указывать конкретные поля для извлечения. - Кешировать небольшие справочники в приложении
Небольшие редко меняющиеся справочники (например, статусы или типы) лучше кешировать в приложении. - Следить за типами в параметризованных запросах
В параметризованных запросах тип данных и длина должны совпадать с тем, что содержится в базе. - Устанавливать индексы,опираясь на выборки
Индексы ставьте на колонки, которые участвуют в where, group by, order by, join, order by, top. - Проверять и анализировать индексы
Индексы надо постоянно проверять и анализировать. Есть специальные запросы, которые позволяют узнать, где нужно поставить индекс, или где он лишний. http://blog.cymen.org/2010/08/18/sql-server-express-and-performance-tuning/ - Следить за использованием distinct
Избегайте distinct. Это ресурсоемкая операция. - Применять SQL Profiler
Для оптимизации запроса используйте SQL Profiler. - Использовать хранимые процедуры
Они компилируются, и поэтому выполняются быстрее. - Точно указывать типы для полей таблицы
При определение полей таблицы по возможности указывайте тип максимально точно (максимальный размер, not null, unique). - Применять bulk insert для вставки большого количества данных
Для большой единовременной вставки данных используйте bulk insert с отключением некоторых функций https://www.simple-talk.com/sql/learn-sql-server/bulk-inserts-via-tsql-in-sql-server/ - Оптимально составлять where-условия
В выражениях where ставьте наименее вероятные впереди при AND и наиболее вероятные при OR. - Не использовать в where-условия ресурсозатратных операций
Избегайте сложных операцией в Where, например Like. - Следить за использованием агрегирующих функций
Агрегирующие функции оказывают большое влияние на память. - Анализировать план сложных запросов
Используйте план запроса для максимальной оптимизации сложных запросов. - Использовать Fast Forward-Only курсоры
Если необходимо использовать курсоры – то лучше использовать Fast Forward-Only курсоры. - Применять временные таблицы в хранимых процедурах
В хранимых процедурах используйте временные таблицы.
Периодически мы проводим обучение и даем возможность стажировки на базе нашей платформы с управлением на SQL. Если вам это интересно, то пожалуйста посмотрите информацию об обучении/стажировке по SQL.