У меня есть SQL-запрос (MS SQL 2008), который я бы хотел оптимизировать по скорости. Он имеет следующую структуру (только в действительности в заявлении дела есть 10 разных случаев).Как оптимизировать условные подвыборки, которые связаны с внутренними соединениями?
Важные биты - это подвыборы в заявлении case, которые включают внутренние соединения между дополнительными таблицами и ссылку на одну из таблиц в предложении FROM (таблица1).
Я думал, что могу оптимизировать это, используя левое (внешнее) объединение в предложении FROM вместо подбора select, но не уверен, потому что sub выбирает также также внутренние соединения. Могу ли я использовать два левых соединения в предложении FROM, где теперь я использую внутреннее соединение в подборах? И как это будет работать с AnotherTable3 со второго в случае?
Любые идеи очень ценятся.
SELECT table1.a,
table2.b,
CASE
WHEN table1.XY = 1 THEN
(SELECT something
FROM AnotherTable1 at1
INNER JOIN AnotherTable2 at2
ON at1.x = at2.y
WHERE at1.abc = table2.abc)
WHEN table1.XY = 2 THEN
(SELECT something
FROM AnotherTable1 at1
INNER JOIN AnotherTable3 at3
ON at1.x = at3.y
WHERE at1.abc = table2.abc)
END AS [problem]
FROM MyTable1 table1
INNER JOIN MyTable2 table2
ON table1.a = table2.b
В таких случаях я обычно пишу 'выбрать ... от MayTable1 table1 ... осталось присоединиться (выбрать ... от AnotherTable1 АТ1 ...) АТ1 на at1.abc = table2.abc и table1.XY = 1 ... ' – Claude
Сравните [этот вопрос и его ответы] (http://stackoverflow.com/questions/15384979/case-clause-execution-procedure) – Claude