Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / LATERAL в ASA9 / 3 сообщений из 3, страница 1 из 1
18.03.2005, 17:39
    #32968957
IgorCCS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LATERAL в ASA9
Может кто-нибудь в пару слов сказать что такое LATERAL.
А то я что-то не догоняю.
Был запрос с JOIN`ами, который на ASA7/8 нормально работал теперь на 9-ке не хочет.
--
В пятницу, в конце дня туго соображается:)
...
Рейтинг: 0 / 0
18.03.2005, 18:13
    #32969057
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LATERAL в ASA9
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
// Варивант 1 - обычное внешнее соединение
SELECT t1.id, t2.Value
FROM Table1 t1
  LEFT JOIN (
    SELECT id, Sum(Value) AS Value
    FROM Table2
    GROUP BY id
  ) AS t2 ON t2.id = t1.id;

// Вариант 2 - его аналог через LATERAL
SELECT t1.id, t2.Value
FROM Table1 t1,
  LATERAL (
    SELECT Sum(Value) AS Value
    FROM Table2
    WHERE id = t1.id
  ) AS t2;
Как видим, LATERAL позволяет производить соединение внутри подзапроса, т.е. подзапрос t2 выполняется на каждую запись t1. В зависимости от ситуации бывает выгоднее сделать LATERAL, чем LEFT JOIN - хотя смотреть в данном случае нужно на план запроса и его стоимость, ситуации бывают разные.

Плюс LATERAL очень удобно использовать для вызова на каждую строку запроса процедуры, возвращающей записи, например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE PROCEDURE sp_Table2 (
  IN @Id int
)
BEGIN
    SELECT Sum(Value) AS Value
    FROM Table2
    WHERE id = @Id;
END;

// Вариант 3 - вызов ХП на каждую запись t1
SELECT t1.id, t2.Value
FROM Table1 t1,
  LATERAL (sp_Table2 (t1.id)) t2;
Этот скрипт полный аналог 2 вышеприведенным скриптам. Вдогонку хочу заметить что оптимизатор его преобразует к варианту 2, а план запросов в данном случае будет у всех 3-х вариантов одинаковым в силу того, что подзапрос вариантов 2 и 3 легко приводится к обычному внешнему соединению (поправка - сие действительно только для последних билдов).
...
Рейтинг: 0 / 0
18.03.2005, 21:33
    #32969266
IgorCCS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LATERAL в ASA9
Огромное спасибо!!! Теперь проще будет по этому хелп читать...
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / LATERAL в ASA9 / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]