Ciao
ho una query in una stored procedure che impiega 1.07 minuti per l'esecuzione mandandomi in timeout la pagina aspnet che la esegue.
Ho lanciato dall'SQL Management Studio il "Piano di esecuzione Effettivo" e vedo (se ho capito bene come funziona) che molto del tempo sembra essere impiegato dall'order by della query (mi indica un "costo del 28%").
Nella select seleziono tre campi da tre tabelle diverse, li attacco e li restituisco as nuovocampo (la stessa cosa poi faccio per altri campi di altre tabelle restituendo as nuovocampo2, nuovocampo3 e nuovocampo4) e poi nell'order by indico il nuovocampo, nuovocampo2, nuovocampo3 e nuovocampo4.... mi pare di capire che per fare l'ordinamento debba rifare, all'atto dell'order by, la costruzione dei nuovicampi (mi sono dato questa spiegazione perchè non capisco cos'altro potrebbe essere che fa pesare così l'ordinamento).
Notare che la select finale restituisce 70 record e l'analisi viene fatta su 40mila record quindi niente di spaventoso.
Ho fatto indici a profusione ma non è migliorato di molto il risultato.

Un conoscente mi ha detto di provare a far generare una tabella temporanea ed a farmi restituire i dati con l'order by applicato ai campi della tabella temporanea.... però:
1- non ho idea di come si faccia questa cosa
2- non so se sia risolutiva
3- il processo qual'è? faccio una insert into tabtemporanea select (tutta la mia select di prima senza l'ordinamento), poi una select su tabtemporanea con l'order by che serve a me, e poi? devo far distruggere la tabella temporanea quando la mia pagina aspnet ha finito? che devo fà?
...
Saggi maestri jedi di sql e loro consigli sono benvenuti!