powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Оптимизатор и коррелированные подзапросы
11 сообщений из 11, страница 1 из 1
Оптимизатор и коррелированные подзапросы
    #34092549
Фотография A.K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASA 8.0.3. Запрос содержит несколько коррелированных подзапросов. Результат, возвращаемый одним из подзапросов, используется в секции WHERE главного запроса. Все выглядит примерно так:

Код: plaintext
1.
2.
3.
4.
5.
select t1.id, t1.f1, 
  (select <запрос, коррелированный с t1>) as q1,
  (select <запрос, коррелированный с t1>) as q2,
  ...
from t1
where t1.f1 > q1 and ....

Хотелось бы до конца понять последовательность, в которой сервер выполнит запрос, а именно:
1) в плане выполнения подзапрос, возвращающий q1, обозначен как SubQ2, а q2 - как SubQ1. Означает ли это, что сначала будет выполняться SubQ1, а потом SubQ2 ?
2) будет ли выполняться подзапрос, возвращающий q2, для тех строк из t1, которые не удовлетворяют условию сравнения с q1 (т.е. условию t1.f1 > q1) ?

Приветствуются не только конкретные ответы, но и теоретические разъяснения по особенностям выполнения запроса в зависимости от различных факторов.
...
Рейтинг: 0 / 0
Оптимизатор и коррелированные подзапросы
    #34092615
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это вообще некорректный SQL.

Нельзя ссылаться в WHERE на поле в списке вывода SELECT-а по его алиасу.

Надо повторять там подзапрос.
...
Рейтинг: 0 / 0
Оптимизатор и коррелированные подзапросы
    #34092641
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЭто вообще некорректный SQL.
Нельзя ссылаться в WHERE на поле в списке вывода SELECT-а по его алиасу.
Надо повторять там подзапрос.
Это было бы ужасно, если б это было правдой
Говорилось про ASA, а не ASE! В ASA это вполне корректный запрос.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create table t1(
id integer not null default autoincrement,
field1 integer NULL,
field2 integer NULL,
primary key(id)
);

INSERT INTO t1(field1,field2)
VALUES ( 1 , 2 );
INSERT INTO t1(field1,field2)
VALUES ( 3 , 4 );
INSERT INTO t1(field1,field2)
VALUES ( 5 , 6 );

select field1 as Alias1, field2 as Alias2, field1+field2 as Summa  
from t1
WHERE (Alias1< 5  and Alias2> 2 ) OR Summa= 3 ;

В ASE подобное разве не работает?
...
Рейтинг: 0 / 0
Оптимизатор и коррелированные подзапросы
    #34092648
Фотография A.K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЭто вообще некорректный SQL.
Нельзя ссылаться в WHERE на поле в списке вывода SELECT-а по его алиасу.
Надо повторять там подзапрос.

Что значит "некорректный", если в используемой СУБД он работает, и возвращает корректный результат? В плане имеем MainQuery и два подзапроса (SubQ1, SubQ2).
Хотя я и понимаю, чем с логической точки зрения он вам не нравится.
...
Рейтинг: 0 / 0
Оптимизатор и коррелированные подзапросы
    #34092874
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знал. Но чего же там ужасного ? Не вижу ничего.
...
Рейтинг: 0 / 0
Оптимизатор и коррелированные подзапросы
    #34093205
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv пишет:

> Не знал. Но чего же там ужасного ? Не вижу ничего.

Теоретически - ничего. Практически - запрос станет короче, прозрачнее,
уменьшатся затраты при необходимости внеси исправления в подзапрос и
уменьшится вероятность ошибки в этом месте. Например исправили подзапрос
в SELECT, но забыли про WHERE. Из кучи таких вот мелочей и складывается
понятие developer friendly.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Оптимизатор и коррелированные подзапросы
    #34093299
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A.K.
Хотелось бы до конца понять последовательность, в которой сервер выполнит запрос, а именно:

Т.к. подобные тонкости не задокументированы, то последовательность можно выяснить лишь опытным путем и только для данного конкретного случая "здесь и сейчас". Поведение может смениться от многих причин. Например от смены номера EBF или даже от изменения гистограммы распределения данных.
Если тебе так важна определенная последовательность, то есть смысл попробовать переделать запрос. Например разбить на несколько, воспользоваться хранимыми процедурами и(или) временным таблицами и т.п.

P.S. иногда полезно воспользоваться функцией REWRITE. В некоторых случаях подзапросы вообще в джойны разворачиваются еще на этапе переписывания запроса.
...
Рейтинг: 0 / 0
Оптимизатор и коррелированные подзапросы
    #34095920
Фотография A.K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне не столько важна последовательность, сколько непонятно, как читать план выполнения для запроса с подзапросами, и как вообще физически выполняется запрос с подзапросами (вот мы же знаем из документации, к примеру,что соединение таблиц физически может выполняться в виде hash join, nested loops join и т.п., порядок опять же в плане указывается, что слева а что справа для nested loops, и можем это учитывать для написания оптимального запроса).

Поэтому минимизирую свой вопрос хотя бы до такого: означает ли порядок нумерации подзапросов в плане (SubQ1, SubQ2, ...) порядок их физического выполнения, или это просто так, циферки?
...
Рейтинг: 0 / 0
Оптимизатор и коррелированные подзапросы
    #34096081
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A.K.Поэтому минимизирую свой вопрос хотя бы до такого: означает ли порядок нумерации подзапросов в плане (SubQ1, SubQ2, ...) порядок их физического выполнения, или это просто так, циферки?
Будет означать цифорки. Единственное что по плану запросов точно - Subquery означает, что указанный в плане запросов подзапросов будет всегда выполнятся на каждую строку результатов основного запроса. А порядок и способ выполнения будет разный и зависеть от способа соединения подзапроса с запросом, при использовании индексов от наличия RAID (возможна организация параллейного чтения и выполнения подзапросов), для 10-ой версии еще от наличия многопроцессорности (распараллеливание выполнения запросов) и т.д. В общем мало ли, что еще понапридумывали разработчики оптимизатора ASA ;)
...
Рейтинг: 0 / 0
Оптимизатор и коррелированные подзапросы
    #34096448
Фотография A.K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSБудет означать цифорки. Единственное что по плану запросов точно - Subquery означает, что указанный в плане запросов подзапрос будет всегда выполнятся на каждую строку результатов основного запроса. ...
Спасибо за разъяснения.
Попутный вопрос: какую-либо толковую литературу конкретно по ASA не подскажете? Пофигу, в электронном или бумажном варианте; если нет на русском, то можно и на английском. Конечно, в документации все описано, но в книжках иногда полезные практические советы бывают.
...
Рейтинг: 0 / 0
Оптимизатор и коррелированные подзапросы
    #34098105
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самая толковая из всего что видел - это BOL. По нему родимому все тонкости и ньюансы и выискиваются. Еще на РУСУГ лежит ссылочка на книжку Брека Картера, там есть кое какие полезные советы, но все таки в основном книжка хороша для тех, кто первый раз видит ASA.

--
www.rusug.ru - портал русскоязычной группы пользователей Sybase
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Оптимизатор и коррелированные подзапросы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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