Оптимизация запросов SQL Server. Часть I
Содержание:
1.Часть I (Вы читаете данный раздел);
2. Часть II;
3. Часть III;
4. Часть IV;
5. Часть V.
В рамках данного материала я представлю жестко заданные предположения, основная цель использования которых - применение метода "оптимизация для неизвестного". В данном случае нам будет точно известно, как происходит угадывание оптимизатором неизвестных величин. Оптимальная настройка запросов в значительной мере начинается с умения объяснить оценки числа строк, особенно неточные.
В моих примерах запросы будут направлены к таблице Sales. SalesOrderDetail в тестовой базе данных AdventnreWorks2014. Если вы захотите выполнить примеры из этой статьи, но не располагаете установленной базой данных, ее можно загрузить на сайте Codeplex по адресу: msftdbprodsamples.codeplex.com/releases/view/125550. Кроме того, стоит убедиться, что база данных настроена на уровень совместимости 120, при котором SQL Server по умолчанию использует новое средство СЕ (2014). Сделать это можно с помощью следующего программного кода:
В первом разделе, в котором рассматривается первая группа операторов, показаны различные сценарии использования метода оптимизации для неизвестного. В следующих разделах для демонстрации оценок используется один или два сценария.

Оценка с оптимизацией для неизвестного для группы операторов >, >=, < и = . Число строк в таблице 121 317, поэтому CE фильтра будет 0,3 * 121317 = 36395,1. Насколько эта величина близка к действительному числу строк в типичном варианте использования, решать вам; однако оптимизатор делает именно такое предположение.
Это первый раздел, в котором демонстрируется метод оптимизации для неизвестного, поэтому начнем с перечисления различных случаев использования данного метода наряду с готовыми к применению примерами.
1.
2. Часть II;
3. Часть III;
4. Часть IV;
5. Часть V.
В рамках данного материала я представлю жестко заданные предположения, основная цель использования которых - применение метода "оптимизация для неизвестного". В данном случае нам будет точно известно, как происходит угадывание оптимизатором неизвестных величин. Оптимальная настройка запросов в значительной мере начинается с умения объяснить оценки числа строк, особенно неточные.
В моих примерах запросы будут направлены к таблице Sales. SalesOrderDetail в тестовой базе данных AdventnreWorks2014. Если вы захотите выполнить примеры из этой статьи, но не располагаете установленной базой данных, ее можно загрузить на сайте Codeplex по адресу: msftdbprodsamples.codeplex.com/releases/view/125550. Кроме того, стоит убедиться, что база данных настроена на уровень совместимости 120, при котором SQL Server по умолчанию использует новое средство СЕ (2014). Сделать это можно с помощью следующего программного кода:
-- Убедитесь, что уровень совместимости базы данных >= 120 для использования по умолчанию нового средства СЕ
USE AdventureWorks2014; -- https://msftdbprodsamples.codeplex.com/releases/view/125550
GO
IF ( SELECT compatibility_level
FROM sys.databases
WHERE name = N'AdventureWorks2014' ) < 120
ALTER DATABASE AdventureWorks2014
SET COMPATIBILITY_LEVEL = 120; -- use 130 on 2016В первом разделе, в котором рассматривается первая группа операторов, показаны различные сценарии использования метода оптимизации для неизвестного. В следующих разделах для демонстрации оценок используется один или два сценария.

Оптимизация для неизвестного для операторов:
Оценка с оптимизацией для неизвестного для группы операторов >, >=, < и = . Число строк в таблице 121 317, поэтому CE фильтра будет 0,3 * 121317 = 36395,1. Насколько эта величина близка к действительному числу строк в типичном варианте использования, решать вам; однако оптимизатор делает именно такое предположение.
Это первый раздел, в котором демонстрируется метод оптимизации для неизвестного, поэтому начнем с перечисления различных случаев использования данного метода наряду с готовыми к применению примерами.