Viste, TOP 100 PERCENT e ORDER BY

di Luca Bianchi, in SQL Server,

Come noto la clausola ORDER BY non è ammessa in una vista ed il tentativo di definire all'interno di essa un ordinamento genera il messaggio

Server: Msg 1033, Level 15, State 1, Procedure nomevista, Line 5
The ORDER BY clause is invalid in views, inline functions, derived tables, and subqueries, unless TOP is also specified.

Sempre più spesso mi capita di vedere script che, per forzare l'ordinamento di una vista, definiscono la clausola TOP 100 PERCENT rendendo possibile, a questo punto, includere la clausola di ordinamento.

Utilizzare questo artificio al solo scopo di evitare di includere l'order by nella query che richiama la vista rappresenta uno dei tanti modi che hanno gli sviluppatori di far arrabbiare i dba (non me ne vogliano gli amici sviluppatori che in quanto amici sono sicuro che non commettono di queste ingenuità... ;-)).

Il risparmio dei 15 o 20 caratteri nel codice non vale certamente l'onere aggiuntivo a cui sottoponiamo SQL Server nel caso in cui si richieda la vista ordinata secondo un criterio differente.

Visualizzando il piano di esecuzione di una query del tipo

SELECT select_list
FROM dbo.vw_MyView
ORDER BY campo

dove dbo.MyView è una vista definita utilizzando la clausola TOP 100 PERCENT ed un criterio di ordinamento differente da campo, si può notare che al termine delle attività per ottenere i dati richiesti (possono essere presenti più step se dbo.vw_MyView è una query complessa) inizia la fase di ordinamento della vista (secondo il criterio definito nella stessa) a cui segue lo step per ordinare i dati secondo il criterio indicato nella query.
L'ultimo ordinamento, quindi, vanifica l'attività eseguita al passaggio precedente e SQL Server ha eseguito una attività (più o meno onerosa) del tutto inutile. E se la vista richiama altre viste ciascuna con un criterio di ordinamento differente, quante attività inutili vengono eseguite?

Spero che le persone a cui mi riferisco leggano prima o poi questo blog e a prescindere dal fatto se si riconoscano o meno nei soggetti destinatari di questo messaggio, diano inizio ad una attività di più pacifica e proficua collaborazione con il dba con cui lavorano...

Buone query a tutti... :-)

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese