Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Какой запрос ОПТИМАЛЬНЕЕ


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]

План конкретного сервера расскажет про это


Наверх

Титульная страница Поиск, карта сайта Написать письмо