Как псевдоним увеличивает производительность - PullRequest
0 голосов
/ 14 марта 2019

Я изучаю код Select на сервере SQL, и мне трудно понять, почему мы должны использовать псевдоним в этом условии Where:

AND NOT EXISTS (
                    (SELECT 1
                        FROM ComprasPedidosItens CPI WITH (NOLOCK)
                        WHERE CPI.NumeroMiro IS NOT NULL AND  CPI.CodigoPedido = ComprasPedidos.CodigoPedido)
                    )

Спасибо

Ответы [ 3 ]

0 голосов
/ 14 марта 2019

Псевдоним не увеличивает производительность.Тем не менее, это помогает понять разницу, когда одна и та же таблица используется в запросе дважды (или более) (с подзапросом, соединением и т. Д.)

В качестве примера рассмотрим эту таблицу, имеющуювнешний ключ, ссылающийся на ту же таблицу:

MyTable:

Self-reference
 +--------+
 |        |
 v        |
id | MyTable_id | data

И этот запрос:

SELECT *
FROM MyTable
LEFT JOIN MyTable
ON MyTable.id = MyTable.MyTable_id
--     ^           ^
--     |           |
-- Which table ? Which table ?
-- The first ?   The first ?
--     Or           Or
-- the second ? the second ?

Использование псевдонимов имеет смысл

SELECT *
FROM MyTable T1
LEFT JOIN MyTable T2
ON T1.id = T2.MyTable_id
-- Now we know.
0 голосов
/ 14 марта 2019

Если вы спрашиваете об алиасе CPI, тогда не требуется.

NOT EXISTS (
            (SELECT 1
                FROM ComprasPedidosItens CPI WITH (NOLOCK)
                WHERE CPI.NumeroMiro IS NOT NULL AND  CPI.CodigoPedido = ComprasPedidos.CodigoPedido)
            )

То же, что и

NOT EXISTS (
            (SELECT 1
                FROM ComprasPedidosItens WITH (NOLOCK)
                WHERE NumeroMiro IS NOT NULL AND  CodigoPedido = ComprasPedidos.CodigoPedido)
            )

Столбцы будут разрешены из ближайшего подходящего элемента в области, и, поскольку это единственная таблица, представленная на этом уровне области, она будет сначала пробоваться по умолчанию (с несогласованными неквалифицированными столбцами, а затем с объектами из внешних областей)

Однако проще использовать имена столбцов из двух частей, чтобы читатели могли легко определить, из какой они таблицы, а короткие мнемонические псевдонимы легче отслеживать, чем все имя таблицы.

Псевдонимы не влияют на производительность.

0 голосов
/ 14 марта 2019

Насколько мне известно, псевдоним не влияет на производительность выполнения запроса.Но если псевдоним используется в списке выбора, могут быть возможности снизить производительность на основе запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...