В нашу офис прибыла старая система для некоторых изменений и исправлений, но она также страдает от проблем с производительностью. Мы точно не знаем, что является источником этой медлительности.
Во время рефакторинга старого кода мы обнаружили несколько запросов sql с шаблоном follow (запросы, например, упрощены):
SELECT
(
SELECT X
FROM A
WHERE A.id = TABLE.id
) AS COLUMN1,
(
SELECT Y
FROM B
WHERE B.id = TABLE.id
) AS COLUMN1,
(
SELECT Z
FROM C
WHERE C.id = TABLE.id
) AS COLUMN1,
...
FROM
TABLE
WHERE
TABLE.id = @param;
Эти запросы выполняют несколько внутренних подзапросов из столбца each, которые они возвращают.
Мы планируем переписать эти запросы по следующему шаблону:
SELECT
A.X, B.Y, C.Z
FROM
TABLE
INNER JOIN A on A.ID = TABLE.ID
INNER JOIN B on B.ID = TABLE.ID
INNER JOIN C on C.ID = TABLE.ID
WHERE
TABLE.id = @param;
С внутренними объединениями они легче читать и понимать, но действительно ли это происходит быстрее? Это лучший способ написать их? К сожалению, первый, который мы переписали, не улучшил время запроса, он сделал запрос немного медленнее.
Вот мой вопрос: нужно ли переписывать все эти запросы? Являются ли эти подзапросы хорошим способом выполнить эту работу? Являются ли они быстрее способом внутреннего соединения?