Общие способы оптимизации в 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.