... permitir el uso de un ORDER BY en una definición de vista.
Esa no es una buena idea. Una vista nunca debe tener un ORDER BY definido.
Un ORDER BY tiene un impacto en el rendimiento: usarlo como vista significa que ORDER BY aparecerá en el plan de explicación. Si tiene una consulta en la que la vista se une a algo en la consulta inmediata, o se hace referencia a ella en una vista en línea (factorización CTE / subconsulta), el ORDER BY siempre se ejecuta antes del ORDER BY final (asumiendo que se definió). No hay ningún beneficio en ordenar filas que no son el resultado final establecido cuando la consulta no usa TOP (o LIMIT para MySQL / Postgres).
Considerar:
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
... es el equivalente a usar:
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
Esto es malo porque:
- El ejemplo es ordenar la lista inicialmente por la descripción del artículo y luego se reordena según la descripción del tipo de artículo. Son recursos desperdiciados en el primer tipo: ejecutarse como está no significa que se esté ejecutando:
ORDER BY item_type_description, item_description
- No es obvio por qué se ordena la vista debido a la encapsulación. Esto no significa que deba crear varias vistas con diferentes órdenes de clasificación ...