Код: Выделить всё
select * from master_table
where (master_table.id not in (select parent_id from linked_table where upper(field1)='СТРОКА1' and (upper(field2)='СТРОКА2' or upper(field2)='СТРОКА3' or upper(field2)='СТРОКА4')))
Проблема в следующем: fetch из результата запроса происходит порциями по 56 записей (как в собственном приложении, так и в IBExpert-е). То есть фетчится 56 записей, потом FB отъедает 100% CPU на несколько секунд, затем выдает очередные 56 записей. Подскажите, почему?
Сервер FB 2.0 RC4. Ранее все работало на RC1 и проблемы не было.
Adapted Plan
PLAN (LINKED_TABLE INDEX (IDX_LINKED_TABLE_FIELD2, IDX_LINKED_TABLE_FIELD2, IDX_LINKED_TABLE_FIELD2, IDX_LINKED_TABLE_FIELD1)) PLAN (MASTER_TABLE NATURAL)
------ Performance info ------
Prepare time = 10ms
Execute time = 721ms
Avg fetch time = 90,13 ms
Current memory = 767 688
Max memory = 795 840
Memory buffers = 2 048
Reads from disk to cache = 102
Writes from cache to disk = 6
Fetches from cache = 416 267
На RC1 план был такой:
Adapted Plan
PLAN (LINKED_TABLE INDEX (FK_LINKED_TABLE_PARENT_ID)) PLAN (MASTER_TABLE NATURAL)
------ Performance info ------
Prepare time = 0ms
Execute time = 371ms
Avg fetch time = 46,38 ms
Current memory = 747 092
Max memory = 775 220
Memory buffers = 2 048
Reads from disk to cache = 30
Writes from cache to disk = 6
Fetches from cache = 1 173
Подскажите, в чем может быть проблема? Переписать запрос без использования WHERE к сожалению не получится - клиентское приложение требует такой конструкции.
Насколько я понимаю, RC4 стал строить другой план? Как его заставить вернуться к прежнему плану?