OS: Win Vista
Firebird: 2.1 SS

Query
------------------------------------------------
select * from (
  select ID, DOC_ID, OWNER_ID, 1 as TYPE_ID
  from DOC_TO_BUS
  union
  select ID, DOC_ID, OWNER_ID, 2 as TYPE_ID
  from DOC_TO_JUR
  union
  select ID, DOC_ID, OWNER_ID, 3 as TYPE_ID
  from DOC_TO_PHYS
) T
where T.TYPE_ID = 1

Plan
------------------------------------------------
PLAN (T DOC_TO_BUS NATURAL)
PLAN (T DOC_TO_JUR NATURAL)
PLAN (T DOC_TO_PHYS NATURAL)

Adapted Plan
------------------------------------------------
PLAN (T DOC_TO_BUS NATURAL)

PLAN (T DOC_TO_JUR NATURAL)

PLAN (T DOC_TO_PHYS NATURAL)

Query Time
------------------------------------------------
Prepare       : 15,00 ms
Execute       : 16,00 ms
Avg fetch time: 0,80 ms

Memory
------------------------------------------------
Current: 34 320 176
Max    : 35 443 808
Buffers: 2 048

Operations
------------------------------------------------
Read   : 0
Writes : 0
Fetches: 56 652


Enchanced Info:
+--------------------------+-----------+-----------+-------------+
|        Table Name        |  Records  |  Indexed  | Non-Indexed |
|                          |   Total   |   reads   |    reads    |
+--------------------------+-----------+-----------+-------------+
|                DOC_TO_BUS|         0 |         0 |         826 |
|                DOC_TO_JUR|         0 |         0 |       23295 |
|               DOC_TO_PHYS|         0 |         0 |        4093 |
+--------------------------+-----------+-----------+-------------+

Т.е. читает все 3 таблицы из объединения, хотя очевидно, что нужна только одна.
Если вынести внутренний запрос в представление (view) картина не изменяется.

Планируется ли как-нибудь обрабатывать подобные ситуации в оптимизаторе?
--
Александр Замараев

Ответить