Могу ли я иметь одновременный SQL-выбор в хранимой процедуре? - PullRequest
4 голосов
/ 12 мая 2011

Есть ли способ запустить несколько операторов SELECT одновременно внутри хранимой процедуры в SQL Server 2008 (parallel execution)?

Если это так, какие шаги необходимо выполнить?

Ответы [ 5 ]

2 голосов
/ 12 мая 2011

Если вы имеете в виду, можете ли вы контролировать это, ответ - нет.

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

Вы можете увидеть это при просмотре плана запроса;

Parallel Query Plan

но вы не увидите этого в Sql Express или в каких-либо выпусках для разработчиков, только в полных серверных выпусках.

1 голос
/ 12 мая 2011

Нет шагов, которые вы можете предпринять:

  • несколько операторов DML в одном пакете не выполняются одновременно

  • Вы не можете включить это

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

Если у вас есть 50 SELECT, я бы посоветовал вам сделать что-то не так. Почему бы вам не спросить о своей реальной проблеме: вместо того, что вы считаете решением вашей проблемы, будет ...

0 голосов
/ 15 июля 2011

Вы можете использовать сервисный брокер для параллельного запуска.Я сделал это, где мне пришлось обновить или вставить много строк в 15 различных таблиц.Я установил операторы update / insert в очередь компонента Service Broker и позволил ему работать в 10 направлениях параллельно.

В очереди есть некоторые издержки, но вставки / обновления достаточно велики - это может быть полезно.

0 голосов
/ 12 мая 2011

Полностью согласен с @blowdart - SQL обычно оптимизирует степень параллелизма для вас.

Единственное, что вы можете сделать, это ограничить этой степенью параллелизма с MAXDOP опция (МАКСИМАЛЬНАЯ Степень Параллелизма).

SELECT [Id] FROM [Table] OPTION (MAXDOP 1)

См. также:

http://support.microsoft.com/kb/329204

Какова цель использования OPTION (MAXDOP 1)в SQL Server?

0 голосов
/ 12 мая 2011

Не очень понятный ваш сценарий, возможно, вы могли бы использовать 'UNION' на нескольких SELECT. или временные таблицы, чтобы сохранить промежуточные результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...