![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
План запроса с IN [IB6.x, Yaffil]
kaif © (2004-04-29 00:46:00)Допустим, яделаю простой запрос:
SELECT * FROM T WHERE ID = 15
получаю такой план:
PLAN (GOODS INDEX (RDB$PRIMARY101))
Я так понимаю, что это использование индекса RDB$PRIMARY101
-----------------------
Теперь я делаю такой запрос
SELECT * FROM T WHERE ID IN (15,16)
получаю такой план:
PLAN (GOODS INDEX (RDB$PRIMARY101,RDB$PRIMARY101))
------------------------
Наконец, я делаю так:
SELECT * FROM T WHERE ID IN (15,16,17,18,19)
и получаю такой план:
PLAN (GOODS INDEX (RDB$PRIMARY101,RDB$PRIMARY101,RDB$PRIMARY101,RDB$PRIMARY101,RDB$PRIMARY101))
------------------------
Можно заметить, что один и тот же индекс перечисляется столько раз, сколько имеется элементов в явно указанном множестве.
У меня вопрос к знатокам синтаксиса PLAN.
Что означает эта конструкция с перечислением 5 раз одного и того же индекса?
Vemer (2004-04-29 01:12:00) [21]Не крутой знаток, но могу предположить, что INсогласно своей сущности перебирает все множество. Поэтому запросов с INследует стараться избегать под IB. Например с помощью Existили Left Joinс проверкой на Null.