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) картина не изменяется.
Планируется ли как-нибудь обрабатывать подобные ситуации в оптимизаторе?
--
Александр Замараев