... 뷰 정의에서 ORDER BY 사용을 허용합니다.
그건 좋은 생각이 아니다. 뷰에는 ORDER BY가 정의되어서는 안됩니다.
ORDER BY는 성능에 영향을 미칩니다. 뷰를 사용하면 ORDER BY가 계획 설명에 표시됩니다. 뷰가 즉각적인 쿼리의 모든 항목에 조인되거나 인라인 뷰 (CTE / 하위 쿼리 분해)에서 참조되는 쿼리가있는 경우 ORDER BY는 항상 최종 ORDER BY (정의 된 것으로 가정)보다 먼저 실행됩니다. 쿼리가 TOP (또는 MySQL / Postgres의 경우 LIMIT)을 사용하지 않는 경우 최종 결과 집합이 아닌 행을 정렬해도 이점이 없습니다.
중히 여기다:
CREATE VIEW my_view AS
SELECT i.item_id,
i.item_description,
it.item_type_description
FROM ITEMS i
JOIN ITEM_TYPES it ON it.item_type_id = i.item_type_id
ORDER BY i.item_description
...
SELECT t.item_id,
t.item_description,
t.item_type_description
FROM my_view t
ORDER BY t.item_type_description
... 다음을 사용하는 것과 동일합니다.
SELECT t.item_id,
t.item_description,
t.item_type_description
FROM (SELECT i.item_id,
i.item_description,
it.item_type_description
FROM ITEMS i
JOIN ITEM_TYPES it ON it.item_type_id = i.item_type_id
ORDER BY i.item_description) t
ORDER BY t.item_type_description
이는 다음과 같은 이유로 좋지 않습니다.
- 이 예는 처음에 항목 설명에 따라 목록을 정렬 한 다음 항목 유형 설명에 따라 다시 정렬하는 것입니다. 첫 번째 종류에서 낭비되는 리소스입니다.있는 그대로 실행한다고해서 실행 중임을 의미 하지는 않습니다 .
ORDER BY item_type_description, item_description
- 캡슐화로 인해 뷰의 순서가 명확하지 않습니다. 그렇다고 다른 정렬 순서로 여러보기를 만들어야한다는 의미는 아닙니다.