Что такое Планы выполнения SQL и как они могут помочь мне?

Я слышал много в последнее время, что я должен смотреть на план выполнения своего SQL для создания суждения по тому, как хорошо это будет работать. Однако я не действительно уверен, где начать с этой функции или что точно это означает.

Я ищу или хорошее объяснение того, что делает план выполнения, что его ограничения, и как я могу использовать его или направление к ресурсу, который делает.

8
задан Daniel 29 January 2010 в 19:29
поделиться

7 ответов

Путь для того, чтобы облегчить это, просто с помощью «Ctrl L» (запрос | отображается расчетным планом выполнения) для некоторых ваших запросов, в студии управления SQL.

Это приведет к отображению графического представления плана выполнения, который, сначала легче «декодировать», чем их текстовая версия.

Планы запросов в крошечном словам :
По сути, план запроса показывает, как SQL Server намерен использовать при разрешении запроса.
Есть действительно много вариантов, даже с простыми запросами.
Например, при работе с присоединением нужно решить, следует ли питать через [отфильтрованные] строки «таблицы A» и на поиск строк «таблица B» или в лопухе через «таблицу B» вообще (это Упрощенный пример, так как есть много других трюков, которые могут быть использованы при работе с присоединениями). Как правило, SQL оценивает количество [отфильтрованных] строк, которые будут выпущены любой таблицей, и выбрать тот, который наименьшее количество для внешней петли (как это уменьшит количество поиска в другой таблице)
Другой пример, состоит в том, чтобы решить, какие индексы использовать (или не использовать).

Есть много онлайн-ресурсов, а также книги, которые описывают планы запроса более подробно, сложность заключается в том, что оптимизация производительности SQL является очень широкой и сложной проблемой, и многие такие ресурсы, как правило, входят в слишком много подробностей для начинающего ; Сначала необходимо понять фундаментальные принципы и структуры, которые лежат в основе SQL Server (способ работы индексов,Способ хранения данных, разница между кластерными индексами и кучами ...) Перед погружением во многие [важные] детали оптимизации запроса. Это немного похоже на бейсбол: сначала вам нужно знать правила перед пониманием всех тонких [и важных] концепций, связанных с игровой стратегией.

См. Это связанное таким вопросом для дополнительных указателей.

-121--3677720-

Описывает фактические алгоритмы, которые сервер использует для получения ваших данных.

SQL SQL Запрос так:

SELECT  *
FROM    mytable1
JOIN    mytable2
ON      …
GROUP BY
        …
ORDER BY
        …

, описывает , что должно быть сделано, но не . Как это должно быть сделано.

План выполнения показывает Как . Как : какие индексы используются, которые соединяют методы соединения (вложенные петли или присоединение или объединение HASH или объединение), как результаты группируются (используя сортировку или хеширование), как они Приказываются и т. Д.

К сожалению, даже современные двигатели SQL не могут автоматически найти оптимальные планы для более или менее сложных запросов, он по-прежнему требует разработчика SQL для переформулирования запросов, чтобы Они исполняются (даже они делают то, что делает оригинальный запрос).

Классический пример будет слишком запросами:

SELECT  (
        SELECT  COUNT(*)
        FROM    mytable mi
        WHERE   mi.id <= mo.id
        )
FROM    mytable mo
ORDER BY 
        id

и

SELECT  RANK() OVER (ORDER BY id)
FROM    mytable

, которые делают то же самое, и теоретически должны быть выполнены с использованием тех же алгоритмов.

Однако фактический двигатель не будет оптимизировать бывшего запроса для реализации тех же алгоритмов, я. добиваться Храните счетчик в переменной и увеличивайте его.

Это сделает то, что нужно сделать: считать ряды снова и снова и снова.

Для оптимизации запросов необходимо на самом деле увидеть, что происходит за кулисами, и это то, что планы исполнения показывают вам.

Вы можете захотеть прочитать эту статью в моем блоге:

4
ответ дан 5 December 2019 в 18:59
поделиться

Вот отличный ресурс, чтобы помочь вам понять их http://downloads.red-gaTe.com/ebooks/highperformanceql_ebook.zip

Это из Red-Gate, которая является компанией, которая делает Great SQL Server Tools, это бесплатно, и оно зажечь время скачать и читать.

1
ответ дан 5 December 2019 в 18:59
поделиться

Здесь и здесь . Планы исполнения позволяют определить область, которая является трудоемким, и поэтому позволяет улучшить ваш запрос.

2
ответ дан 5 December 2019 в 18:59
поделиться
  1. План выполнения показывает, насколько именно SQL Server обрабатывает запрос
  2. , он производится как часть процесса оптимизации запросов, который делает SQL Server. Это не то, что вы напрямую создаете.
  3. Это покажет, какие указатели, которые он решил, лучше всего использовать, и в основном это план для того, как SQL Server обрабатывает запрос
  4. Оптимизатор запросов примет запрос, проанализировать его и потенциально придумать ряд Различные планы исполнения. Это процесс оптимизации на основе затрат, и он выберет тот, который он чувствует, является лучшим.
  5. После того, как план исполнения был сгенерирован, он перейдет в кэш плана, чтобы последующие вызовы для этого же запроса могут снова повторно использовать тот же план, чтобы сэкономить, чтобы повторить работу, чтобы придумать план.
  6. Планы исполнения автоматически выпадают из кэша, в зависимости от их значения (планы низкого значения удаляются до того, как высокие планы стоимости выполняют, чтобы обеспечить максимальную выгоду)
  7. Планы исполнения, которые помогут вам пройти проблемы, такие как индексы Отсутствует
1
ответ дан 5 December 2019 в 18:59
поделиться

Для упрощения этой задачи просто используйте Ctrl L (Query | Display Estimated Execution Plan) для некоторых запросов в среде SQL Management Studio.

Это приведет к отображению графического представления плана выполнения, который сначала легче «декодировать», чем его текстовую версию.

Запрос планов в нескольких словах :
По существу план запроса показывает, что путь SQL Server намерен использовать при разрешении запроса.
Есть действительно много вариантов, даже с простыми запросами.
Например, при работе с JOIN необходимо решить, выполнять ли цикл через [отфильтрованные] строки «таблицы A» и искать строки «таблицы B», или сначала выполнить цикл через «таблицу B» (это упрощенный пример, поскольку существует много других приемов, которые можно использовать при работе с JOINs). Как правило, SQL оценивает количество [отфильтрованных] строк, которые будут созданы любой из таблиц, и выбирает строку, которая является наименьшим числом для внешнего цикла (так как это уменьшит количество запросов поиска в другой таблице)
Другой пример - решить, какие индексы использовать (или не использовать).

Существует много онлайн-ресурсов, а также книг, которые описывают планы запросов более подробно, сложность заключается в том, что оптимизация производительности SQL является очень широкой и сложной проблемой, и многие такие ресурсы, как правило, слишком подробно для новичка; Сначала необходимо понять фундаментальные принципы и структуры, лежащие в основе SQL Server (способ работы индексов, способ хранения данных, различие между кластеризованными индексами и кучами...), прежде чем перейти ко многим [важным] деталям оптимизации запросов. Это немного похоже на бейсбол: сначала нужно знать правила, прежде чем понимать все тонкие [и важные] концепции, связанные со стратегией игры.

Дополнительные указатели см. в разделе Вопрос SO .

-121--3677720-

Здесь и Вот некоторые статьи проверить его. Планы выполнения позволяют определить область, которая занимает много времени и, следовательно, позволяет улучшить запрос.

-121--3677718-

это очень серьезная часть знаний. И я настоятельно рекомендую специальные учебные курсы по этому вопросу. Что касается меня после недели пребывания на курсах, я повысил производительность запросов около 1000 раз ( ностальгия )

0
ответ дан 5 December 2019 в 18:59
поделиться

План выполнения показывает, как база данных вытесняется, сортировка и фильтрация данных, необходимых для вашего запроса.

Например:

SELECT
    *
FROM
    TableA
INNER JOIN
    TableB
ON
    TableA.Id = TableB.TableAId
WHERE
    TableB.TypeId = 2
ORDER BY
    TableB.Date ASC

приведет к выполнению плана выполнения, показывающую базу данных, полученные записи из Tablea и Tableb, соответствующие им, чтобы удовлетворить присоединение, фильтрацию, чтобы удовлетворить туда и сортировку, чтобы удовлетворить заказ.

Из этого вы можете разрабатывать то, что замедляет запрос, будет ли было бы полезно просмотреть ваши индексы или, если вы можете ускорить вещи другим способом.

0
ответ дан 5 December 2019 в 18:59
поделиться

Облегчить это можно, просто используя "Ctrl L" (запрос | "Отобразить расчетный план выполнения") для некоторых ваших запросов, в SQL Management Studio.

В результате будет отображен графический вид Плана выполнения, который поначалу легче "расшифровать", чем его текстовую версию.

План выполнения запросов в миниатюрной таблице :
. По сути, план запроса показывает, как SQL-сервер намеревается использовать для разрешения запроса.
Вариантов действительно много, даже с простыми запросами.
Например, при работе с JOIN, нужно решить, следует ли сначала пройтись по [отфильтрованным] строкам "таблицы A" и поискать строки "таблицы B", или вместо этого пройтись по "таблице B" (это упрощенный пример, так как есть много других хитростей, которые могут быть использованы при работе с JOIN). Обычно SQL будет оценивать количество [отфильтрованных] строк, которые будут произведены любой из таблиц, и выбирать ту, которая наименьше всего подходит для внешнего цикла (так как это уменьшит количество поисков в другой таблице)
. Другой пример - решать, какие индексы использовать (или не использовать).

Существует множество онлайн-ресурсов, а также книг, в которых более подробно описываются планы запросов, сложность заключается в том, что оптимизация производительности SQL является очень широкой и сложной проблемой, и многие такие ресурсы имеют тенденцию вдаваться в слишком много деталей для новичка; Прежде чем углубляться во многие [важные] детали оптимизации запросов, необходимо понять фундаментальные принципы и структуры, лежащие в основе SQL Server (способ работы индексов, способ хранения данных, разница между кластеризованными индексами и кучами...). Это немного похоже на бейсбол: сначала нужно знать правила, прежде чем понимать все тонкие [и важные] понятия, связанные с игровой стратегией.

Смотрите этот связанный SO Question для дополнительных указателей.

1
ответ дан 5 December 2019 в 18:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: