Моя таблица:
CREATE TABLE "ADMIN"."TABLETEST"
(
"ID" NUMBER NOT NULL ENABLE,
"NOTE" NUMBER
)
Как я использую свою таблицу с Entity Framework:
var s = entities.TABLETESTs.OrderByDescending(r => r.NOTE).Skip(10).Take(10);
Запрос, сгенерированный следующим образом:
SELECT *
FROM
(SELECT
"Extent1"."ID" AS "ID",
"Extent1"."NOTE" AS "NOTE"
FROM
(SELECT
"Extent1"."ID" AS "ID",
"Extent1"."NOTE" AS "NOTE",
ROW_NUMBER() OVER (ORDER BY "Extent1"."NOTE" DESC) AS "row_number"
FROM
(SELECT
"TABLETEST"."ID" AS "ID",
"TABLETEST"."NOTE" AS "NOTE"
FROM
"ADMIN"."TABLETEST" "TABLETEST") "Extent1"
) "Extent1"
WHERE
("Extent1"."row_number" > 10)
ORDER BY
"Extent1"."NOTE" DESC
)
WHERE
(ROWNUM <= (10) )
Если выпрочитав этот последний запрос, вы обнаружите, что он содержит два ORDER BY "Extent1"."NOTE" DESC
;почему Entity Framework генерирует два предложения "order by", это необходимо?Потому что, если я опущу второй 'order by', мой запрос станет намного быстрее и даст тот же результат, что и для обоих 'order by'