TSQL НЕ СУЩЕСТВУЕТ Почему этот запрос такой медленный? - PullRequest
2 голосов
/ 16 декабря 2010

Отладка приложения, которое запрашивает SQL Server 05, не может изменить запрос, но нуждается в оптимизации.

Выполнение всех выборок по отдельности происходит быстро <1сек, например: выберите * из Acscard, выберите идентификатор сотрудника ... При объединении это занимает 50 секунд. </p>

Лучше ли устанавливать неинтересные поля accesscardid в null или в '' при использовании EXISTS?

  SELECT * FROM ACSCard
    WHERE NOT EXISTS
     ( SELECT Id FROM Employee 
              WHERE Employee.AccessCardId = ACSCard.acs_card_number )
    AND NOT EXISTS
     ( SELECT Id FROM Visit 
               WHERE Visit.AccessCardId = ACSCard.acs_card_number ) 
  ORDER by acs_card_id

Ответы [ 2 ]

3 голосов
/ 16 декабря 2010

Есть ли у вас индексы для Employee.AccessCardId, Visit.AccessCardId и ACSCard.acs_card_number?

1 голос
/ 16 декабря 2010

Предложение SELECT не оценивается в предложении EXISTS.Это:

WHERE EXISTS(SELECT 1/0
               FROM EMPLOYEE)

... должно вызвать ошибку деления на ноль, но это не так.Но вам нужно поместить что-то в предложение SELECT, чтобы это было допустимым запросом - не имеет значения, является ли он NULL или строкой нулевой длины.

В SQL Server, NOT EXISTS (и NOTIN) лучше, чем подход LEFT JOIN / IS NULL, если сравниваемые столбцы не обнуляются (значения с обеих сторон не могут быть NULL) .Сравниваемые столбцы должны быть проиндексированы, если их еще нет.

...