После обновления SQL Server 2008 запрос с UNION выполняется очень медленно - PullRequest
1 голос
/ 31 августа 2011

Мы перешли с SQL Server 2000 на 2008, и запрос для некоторых пользователей (в определенных ролях базы данных) выполняется очень медленно, когда мы используем оператор UNION.Я попытался сделать это с помощью UNION ALL

Запрос выглядит так:

SELECT  'PONumber'= '','POId'=''

UNION 

SELECT DISTINCT 
                'PONumber'=PONumber, 
                'POId'=RTRIM(CONVERT(varchar(32),po.POId) )
FROM  PurchaseOrder po JOIN  ... JOIN ..... JOIN ...................

Если я просто удаляю первую часть (и UNION) и запускаю второй запрос, результаты возвращаются немедленно.

Есть предложения?

1 Ответ

0 голосов
/ 31 августа 2011

Я не знаю, как это отреагировало бы в SQL 2000, но использование UNION вместо UNION ALL вызовет операцию сортировки, когда результаты двух запросов объединены (чтобы избавиться от дубликатов),Это может быть значительное количество обработки, в зависимости от размера вашего результирующего набора.

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

...