У меня была странная проблема с некоторыми запросами, которые зависят от подзапроса.Они работают молниеносно, пока я не использую оператор UNION в подзапросе.Потом они бегают бесконечно, я дал через 10 минут.Сценарий, который я сейчас описываю, не тот, с которого я начинал, но я думаю, что он устраняет множество возможных проблем, но приводит к той же самой проблеме.Поэтому, несмотря на то, что это бессмысленный запрос, потерпите меня!
У меня есть таблица:
tblUser - 100,000 rows
tblFavourites - 200,000 rows
Если я выполню:
SELECT COUNT(*)
FROM tblFavourites
WHERE userID NOT IN (SELECT uid FROM tblUser);
… тогда он запускается впод секунду.Однако, если я изменю его так, чтобы подзапрос имел UNION, он будет работать не менее 10 минут (прежде чем я сдаюсь!)
SELECT COUNT(*)
FROM tblFavourites
WHERE userID NOT IN (SELECT uid FROM tblUser UNION SELECT uid FROM tblUser);
Бессмысленное изменение, но оно должно дать тот же результати я не понимаю, почему это должно занять больше времени?
Помещение подзапроса в представление и вызов этого вместо этого имеет тот же эффект.
Есть идеи, почему это будет?Я использую SQL Azure.
Проблема решена.Смотрите мой ответ ниже.