...permettre l'utilisation d'un ORDER BY dans une définition de vue.
Ce n'est pas une bonne idée. Une vue ne devrait jamais avoir un ORDER BY défini.
Un ORDER BY a un impact sur les performances - son utilisation dans une vue signifie que l'ORDER BY apparaîtra dans le plan d'explication. Si vous avez une requête où la vue est jointe à n'importe quel élément de la requête immédiate, ou référencée dans une vue en ligne (factorisation CTE/sous-requête), le ORDER BY est toujours exécuté avant le ORDER BY final (en supposant qu'il ait été défini). Il n'y a aucun avantage à ordonner les lignes qui ne sont pas le jeu de résultats final lorsque la requête n'utilise pas TOP (ou LIMIT pour MySQL/Postgres).
Pensez-y :
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
...est l'équivalent d'utiliser :
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
C'est mauvais parce que :
- Dans cet exemple, la liste est d'abord classée en fonction de la description de l'article, puis elle est réorganisée en fonction de la description du type d'article. Il s'agit d'un gaspillage de ressources dans le premier tri - le fonctionnement en l'état fait que no signifie que c'est en cours :
ORDER BY item_type_description, item_description
- Il n'est pas évident de savoir par quoi la vue est ordonnée en raison de l'encapsulation. Cela ne signifie pas que vous devez créer plusieurs vues avec des ordres de tri différents...
5 votes
Peut-être qu'il y a une déclaration de construction en cours : "SÉLECTIONNER LE TOP {0} POUR CENT..."
0 votes
Votre première phrase est devenue la réponse à une de mes questions cachées.
0 votes
J'utilise les 99,9999999 POURCENT les plus élevés et ça marche toujours. C'est assez proche. J'ai tendance à ajouter le nombre de '9' en fonction du nombre d'enregistrements prévus. Plus d'enregistrements, plus de '9' et ça marche toujours. Je l'ai utilisé de SQL 2008 à SQL 2017.