Я создал упрощенный пример этой проблемы.Следующий запрос возвращает пустые значения для всех столбцов, которых нет в предложении order by.Если я запускаю запрос против 10g, то это нормально.Это базовая реализация запроса top n.
Я знаю, что внутренний оператор выбора неэффективен, но генерируется SQL (хотя я могу изменить движок, если необходимо).
Вся помощь приветствуется!
select * from (
select b.* from USER_table b
where b.id in (
select c.id from USER_table c where c.removed = 0
)
order by surname
) a where rownum <= 10
--------------------------------------------------------
-- DDL for Table USER_TABLE
--------------------------------------------------------
CREATE TABLE "CHRONICLE"."USER_TABLE"
( "FIRST_NAME" VARCHAR2(20 BYTE),
"SURNAME" VARCHAR2(20 BYTE),
"USERNAME" VARCHAR2(20 BYTE),
"REMOVED" NUMBER,
"ID" NUMBER
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ;
--------------------------------------------------------
-- DDL for Index USER_TABLE_PK
--------------------------------------------------------
CREATE UNIQUE INDEX "CHRONICLE"."USER_TABLE_PK" ON "CHRONICLE"."USER_TABLE" ("ID")
PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ;
--------------------------------------------------------
-- Constraints for Table USER_TABLE
--------------------------------------------------------
ALTER TABLE "CHRONICLE"."USER_TABLE" MODIFY ("ID" NOT NULL ENABLE);
ALTER TABLE "CHRONICLE"."USER_TABLE" ADD CONSTRAINT "USER_TABLE_PK" PRIMARY KEY ("ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ENABLE;
Версия oracle - 10.2.0.1.
Она работает в Windows 2008 R2 x64
ОбъяснитьПлан на 11g
![Explain Plan For 11g](https://i.stack.imgur.com/oxXVg.jpg)
Объясните план на 10g
![Explain Plan For 10g](https://i.stack.imgur.com/s8L8j.jpg)