Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.18;
Скачать: CL | DM;

Вниз

План выполнения подзапросов   Найти похожие ветки 

 
PrettyFly   (2002-10-28 13:04) [0]

Я всегда думал, что IB выполняет запросы поумному, но оказалось, что это совсем не так...


SELECT * FROM B
WHERE
B.G IN (SELECT C.G FROM C WHERE C.ID IN(1,2,3,4,5,6,7,8,9,10))
AND (B.P = 6)


Надо сначала выполнить внутренний SELECT один раз, а потом уже внешний. А выполняется внешний, и для каждой записи внутренний.
В результате, вместо M+N, время выполнения получается М*N. Как это можно исправить?


 
passm ©   (2002-10-28 13:59) [1]

PrettyFly (28.10.02 13:04)> Не знаю... Но могу предложить альтернативный запрос:
SELECT DISTINCT B.*
FROM B
INNER JOIN C ON (C.G = B.G)
WHERE C.ID IN (1,2,3,4,5,6,7,8,9,10)
AND B.P = 6
Но, это странно. Т. к. во внутреннем запросе не использкуется B :\ .


 
Desdechado ©   (2002-10-28 17:09) [2]

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



Страницы: 1 вся ветка

Текущий архив: 2002.11.18;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
6-59300
Aldor
2002-09-20 11:56
2002.11.18
А можно ли узнать имя компа в сети?


14-59340
Николай Быков
2002-10-28 18:54
2002.11.18
Формат wave и mpeg3 файлов


4-59475
Donatas
2002-10-06 18:27
2002.11.18
HOOK и и тд


1-59152
dimonf
2002-11-08 19:04
2002.11.18
Как обновлять TreeView при добавлении или удалении группы.


1-59191
Onix-=
2002-11-09 17:09
2002.11.18
Выделение определенным шрифтом (жирным, курсивом) зарезервированн