...ビュー定義でのORDERBYの使用を許可します。
それは良い考えではありません。ビューにORDERBYを定義してはなりません。
ORDER BYはパフォーマンスに影響を与えます。ビューを使用すると、ORDERBYがExplainプランに表示されます。ビューが即時クエリ内の何かに結合されているクエリ、またはインラインビューで参照されているクエリがある場合(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
- カプセル化のため、ビューが何によって順序付けられているかは明らかではありません。これは、異なる並べ替え順序で複数のビューを作成する必要があるという意味ではありません...