Псевдоним подзапроса

Рейтинг: 1Ответов: 1Опубликовано: 01.12.2014
    Select A.Id, B.Name, C.Mail
        from 
              (select * from TableA) AS A
        JOIN 
              TableB AS B
              ON B.Id = A.Id
        JOIN 
              TableC AS C
              ON C.Id = A.Id

Вопрос №1: при выполнении конструкции "(select * from TableA) AS A" будет создана временная таблица или при обращении к псевдониму А в join'ах запрос будет снова выполняться?

Вопрос №2: для того чтобы запрос выполнялся как можно быстрее, что лучше - создавать временные таблицы или использовать конструкцию "(select * from TableA) AS A"?

Ответы

▲ 2Принят

Сервер умный и скобки раскроет. В зависимости от структуры таблиц и имеющихся статистики и индексов он может даже переставить таблицы местами (например, для каждой записи из С найти записи из Б и уже для них искать записи из А).

Для ускорения достаточно грамотно создать индексы.