Форум: "Базы";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
ВнизInterBase - Сколько раз выполняется вложенный запрос в where Найти похожие ветки
← →
Tariel (2004-06-14 09:48) [0]У меня было два вложенных запроса, один был связан с внешней, но я думал что слишком накладно вызывать подзапрос к каждой записи и раелизовал другой запрос, где вложенный не зависит от внешнего, но только скорость не увеличилась. У меня есть подозрение что InterBase/FireBird вызывает подзапрос для каждой записи независимо от того связан он с внешним или нет.
Вот пример
1.
select * from MyTable outer
where
( select Max(MyField)
from MyTable
WHERE outer.ID = ID) = MyField
2.
select * from MyTable
where
MyField in
(select Max(MyField) from MyTable)
← →
Tariel (2004-06-14 09:56) [1]Забыл,во стором есть еще group by, а выполняется он в раз пять медленнее
← →
Anry (2004-06-14 10:43) [2]Посмотри план запроса. Если NATURAL чтение то IBase делает тебе полный перебор. Попробуй оптимизировать добавив нужные индексы, только не перебарщивай с их количеством (только необходимые).
← →
Johnmen © (2004-06-14 17:24) [3]Если подзапрос полностью автономен, то он выполнится один раз. По кр.мере в случае последних версий сервера.
Второй запрос выполняется долго, т.к. группировка очень ресурсоемкая операция, особенно по времени...
← →
Romkin © (2004-06-14 17:28) [4]А если подзапрос зависит от внешнего, то он выполнится для каждой строки
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.043 c