У меня есть приложение, в котором пользователь имеет маску, которая запускает операторы sql в базе данных SQL Server 2008. Кроме того, пользователь может устанавливать параметры в маске. Рассмотрим маску с одним параметром, который представляет собой раскрывающийся список с двумя вариантами: «Самолеты» и «Автомобили».SQL Server 2008: оптимизация производительности запроса с известным пустым результатом
Когда пользователь выбирает «Автомобили» и нажимает кнопку «Выполнить», следующий запрос SQL, который я сконфигурировал ранее в маске, попадает в базу данных.
SELECT cars.id, cars.name
FROM cars
WHERE 'Cars' = 'Cars'
UNION ALL
SELECT planes.id, planes.name
FROM planes
WHERE 'Planes' = 'Cars'
(Это довольно составлен пример, так как запросы в моей заявке являются гораздо более сложными с большим количеством JOINS и так далее ...)
Даже если я возьму вторую часть и вставить его в студию управления SQL Server, установите некоторые параметры и нажмите «выполнить», запрос займет несколько секунд, чтобы завершить ... с пустым результатом.
Мой вопрос сейчас: как я могу оптимизировать вторую часть, поэтому SQL Server распознает, что во втором операторе SELECT действительно нечего делать?
EDIT:
Причина, почему мой второй («мертвые») запрос выполняется в течение некоторого времени, заключается в следующем: В запросе есть JOINS, наряду с Sub-SELECT в ИНЕКЕ. Скажем,
SELECT planes.id, planes.name
FROM planes
INNER JOIN very_complex_colour_view colours
ON colours.id = planes.colour.id
WHERE 'Planes' = 'Cars'
Фактически даже таблица «плоскостей» представляет собой сложный вид.
Не можете ли вы использовать [IN] (http://msdn.microsoft.com/en-us/library/ms177682.aspx) в своем запросе? – acermate433s