Re: Yaffil CS. Значение параметра в запросе (Уточнение)
- From
- Сергей Белов (2:5020/400)
- To
- Dmitry Kuzmenko (2:5054/37.63)
- Date
- 2005-03-11T15:55:42Z
- Area
- SU.DBMS.INTERBASE
From: "Сергей Белов" <SBelov@parus.com.ua>
"Dmitry Kuzmenko" <kdv@ibase.ru> сообщил/сообщила в новостях следующее:
news:d0pl3a$8mt$1@host.talk.ru...
> Hello, Сергей!
>
> Сергей Белов wrote:
>
Таблицы выглядят так:
TABLE1 (ID Integer, KOD VARCHAR(10), NAME VARCHAR(20))
ID - первичный ключ
Уникальный индекс по KOD
TABLE2 (ID Integer, T1_KOD VARCHAR(10), TEXT VARCHAR(100), SIGN Integer)
ID - первичный ключ
Неуникальный индекс по T1_KOD
Неуникальный индекс по SIGN
> > Запрос:
> > Select T1.KOD
> > From TABLE1 T1
> > Where Exists
> > (Select T2.ID
> > From TABLE2 T2
> > Where T1.KOD = T2.T1_KOD and T2.SIGN = :SIGN)
>
> план запроса, какие есть индексы (в т.ч. по T2.SIGN? зачем тут exists
> если это простой join?
> почему в предыдущем письме запрос с left join?
c left join обшибся...)... я его не пользовал....
INNER JOIN работает несравненно долго (я не дождался).
Вот запрос и план:
Select T1.NAME
From TABLE1 T1
Inner Join TABLE2 T2
On T1.ID = T2.T1_ID
Where T2.SIGN = :SIGN
PLAN JOIN (T2 INDEX (I_TABLE2_SIGN),T1 INDEX (I_KOD))
Вроде бы только индексы используются, но я ждал 2 минуты - потом убил
задачу.
а вот план моего запроса с Exists
PLAN (T2 INDEX (I_TABLE2_SIGN,I_TABLE2_KOD))
PLAN (T1 NATURAL)
>
> > Столкнулся со следующим парадоксом:
> > если запросу в параметр :SIGN передать 0, то запрос выполняется 150
> > миллисекунд,
> > а если любое другое значение (1, 2, да хоть 10), то запрос выполняется в
> > среднем 8 секунд.
>
> такое есть только по композитным индексам. артефакт, так сказать.
> если, конечно, у тебя не сборка мусора срабатывает.
>
> --
> Dmitri Kouzmenko, www.ibase.ru, 953-13-34
>
> Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
--- ifmail v.2.15dev5.3
* Origin: Demos online service (2:5020/400)
SEEN-BY: 46/50 50/203 450/186 1024 451/30 454/9 461/132 640 469/999 4616/3
SEEN-BY: 4625/8 4627/10 4646/1 5000/76 5000 5001/5001 5002/79 5003/57 5006/1
SEEN-BY: 5007/1 5010/53 70 5011/13 5012/23 5020/52 118 175 400 545 604 715 758
SEEN-BY: 5020/894 1042 1057 1523 1604 1835 2238 4441 8383 12000 5021/29 5025/3
SEEN-BY: 5025/750 5026/14 5027/16 5030/115 556 966 1063 1900 5032/14 5036/1
SEEN-BY: 5040/47 5042/13 5051/15 5054/1 8 9 28 35 37 45 63 5055/95 5057/1
SEEN-BY: 5058/24 5061/15 5062/1 5066/18 5069/7 5070/1222 5080/68 1003 5081/2
SEEN-BY: 5082/6 5083/21 5085/13 5095/20 6000/254
PATH: 5020/400 4441 545 5054/1 37