![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Какой запрос ОПТИМАЛЬНЕЕ
Sectey © (2003-10-14 11:05:00)
уменя есть таблица:
Client
id - код клиента
subid - код группы клиентов
name - имя клиента
я знаю код клиента мне необходимо выбрать всех клиентов входящих в туже группу что и извесны.
Я знаю два способа написания запроса, Но не знаю какой из них ОПТИМАЛЬНЕЕ.
SELECT c.id, c.name from client c
WHERE c.subid in (SELECT cc.subid FROM client cc WHERE cc.id = :id GROUP BY cc.subid)
или
SELECT с2.id, с2.name
FROM Client с1 INNER JOIN Client с2 ON с1.subid = с2.subid
WHERE (с1.id =:id)
asp (2003-10-14 12:20:00) [1]
Но это уже IMHO текущая работа администратора БД (статистики...) по поддержке базы данных. Вопрос уходит в сторону сопровождения БД.
Reindeer Moss Eater (2003-10-14 11:58:00) [2]
Поэтому и было сказано [1]
asp (2003-10-14 11:56:00) [3]
Reindeer Moss Eater © (14.10.03 11:49) [11]>
В общем случае зависит от фрагментирования таблиц, набора индексов и результатов статистики.
Reindeer Moss Eater (2003-10-14 11:49:00) [4]
Эксперимент на DB2 показал, что на оба запроса формируется одинаковый план.
Эксперимент проведен на таблицах не автора вопроса. Поэтому дает не обязательно адекватный результат
asp (2003-10-14 11:44:00) [5]
И все же неплохо было бы знать СУБД.
Эксперимент на DB2 показал, что на оба запроса формируется одинаковый план. И оба запроса оптимизируются к:
SELECT Q2.ID AS "ID"
FROM EXP.GOODS AS Q1, EXP.GOODS AS Q2
WHERE (Q1.ID = :?) AND (Q2.GROUP_GOODS = Q1.GROUP_GOODS)
Пардон за измененные наименования таблиц и столбцов :)
Sergey13 (2003-10-14 11:25:00) [6]
2Johnmen © (14.10.03 11:15) [6]
8-) Обогнал.
2Anatoly Podgoretsky © (14.10.03 11:18) [8]
То же не факт (данные в кэше сервера). План то он понадежнее.
Anatoly Podgoretsky (2003-10-14 11:18:00) [7]
А щачем тебе гадать, попробуй выполнить оба запроса и измерить время, не проще ли и главное данные будут реальные, а не того сервера.
Johnmen (2003-10-14 11:15:00) [8]
SELECT c.id, c.name from client c
WHERE c.subid = (SELECT cc.subid FROM client cc WHERE cc.id = :id)
Sergey13 (2003-10-14 11:15:00) [9]
Скорее всего будет
SELECT c.id, c.name from client c
WHERE c.subid=(SELECT cc.subid FROM client cc WHERE cc.id = :id)
asp (2003-10-14 11:14:00) [10]
DBMS?
Sectey (2003-10-14 11:13:00) [11]
>Reindeer Moss Eater ©
>План конкретного сервера расскажет про это
Что это значит?
Reindeer Moss Eater (2003-10-14 11:08:00) [12]
!!!
Sectey (2003-10-14 11:07:00) [13]
>Reindeer Moss Eater ©
???
Reindeer Moss Eater (2003-10-14 11:06:00) [14]
План конкретного сервера расскажет про это