Порядок SQL, вызывая большие времена выполнения - PullRequest
0 голосов
/ 17 февраля 2012

У меня следующий запрос.Когда я удаляю Order by statment в нижней части запроса, он запускается через несколько секунд.

Когда я добавляю Order by statment в, это может занять пару минут.

Есть личто-то явно не так с этим запросом, который замедлит его?

SELECT     TOP (10) addedBy, contactName, title_name, title_short_description,     private, Art_medium, Artist_collection, Art_permanent_collection, dateEntered,  dateModified, 
title_translated_description, weblink, type, start_date, end_Date, Subcategory,  title_art_description, id, title_name_translated, translated_short_description, pickDate, 
pickOfTheMonth, event_periods, other_categories, rating, cnt, Artists_represented,  city, country, county, district, latitude, longitude, openingTimes, Short_description, 
sub_categories, venue_address1, venue_address2, venue_Name, venue_translated_name,  title_id, venue_id, isLive, venueLive, tags, invite_only, featured_venue, 
translated_description, venue_addedBy
FROM       tblTitle_popular AS title
WHERE      (id NOT IN (SELECT TOP (91) id
                       FROM   tblTitle_popular AS title
                       WHERE  (0 = 0) 
                       AND    (start_date >= '27-Jan-2012') 
                       AND (start_date <= '31-Dec-2999') 
                       AND (isLive = 1) 
                       AND (venueLive = 1) 
                       AND (private <> 1 OR private IS NULL)
                       ORDER BY pickOfTheMonth DESC, pickDate DESC, featured_venue DESC, start_date, city)) 
AND (0 = 0)
AND title.start_date >= '27-Jan-2012'
AND (title.start_date <= '31-Dec-2999')  
AND (title.isLive = 1) 
AND (title.venueLive = 1) 
AND 
(title.private <> 1 OR title.private IS NULL) 
/* 
ORDER BY title.pickOfTheMonth DESC, title.pickDate DESC, title.featured_venue DESC,  title.start_date, title.city
*/

Ответы [ 2 ]

0 голосов
/ 18 февраля 2012

Order by в любом дБ делает запрос длиннее.Учитывая, что в вашем запросе 2 Order by операторов, я бы предложил создать некоторые индексы на их основе.

0 голосов
/ 17 февраля 2012

Если вы используете SQL Server 2005 + (так как вы используете TOP с круглыми скобками), вы можете попробовать

WITH title 
     AS (SELECT *, 
                ROW_NUMBER() OVER ( ORDER BY pickOfTheMonth DESC, 
                                             pickDate DESC, 
                                             featured_venue DESC, 
                                             start_date, 
                                             city) AS RN 
         FROM   tblTitle_popular 
         WHERE  ( start_date >= '27-Jan-2012' ) 
                AND ( start_date <= '31-Dec-2999' ) 
                AND ( isLive = 1 ) 
                AND ( venueLive = 1 ) 
                AND ( private <> 1 
                       OR private IS NULL )) 
SELECT addedBy, 
       contactName, 
       title_name, 
       /*Other Columns*/
       venue_addedBy 
FROM   title 
WHERE  RN BETWEEN 92 AND 101 
ORDER BY RN

Пожалуйста, загрузите XML-версию фактического плана выполнения, если вы хотите получить предложения по улучшению производительности вашего существующего запроса.

...