In generale, non importa. L'ottimizzatore dovrebbe essere in grado di individuare l'ordine più efficiente in cui unire le tabelle indipendentemente dall'ordine in cui appaiono nella query.
È tuttavia possibile che l'ordine delle tabelle influenzi il piano di query. Questo in genere non sarebbe il caso se si ha un semplice join a due tabelle, ma con l'aumentare del numero di tabelle in una query, il numero di join possibili aumenta ad una velocità O (n!). Abbastanza rapidamente, diventa impossibile per l'ottimizzatore prendere in considerazione tutti gli ordini di join possibili, quindi deve utilizzare varie euristiche per potare l'albero. Ciò, a sua volta, porta a situazioni in cui l'ottimizzatore sceglie una tabella di guida diversa se quella tabella viene elencata per prima nell'istruzione SQL anziché quando quella tabella è la decima tabella nella query. Jonathan Lewis ha un bel post sul blog che mostra come the order tables appear in a query can affect the query plan.Se vuoi essere più attento, elencare il tavolo da guida prima è una cosa ragionevole da fare-- non sarà di grande aiuto, ma potrebbe occasionalmente fare qualcosa di buono.
fonte
2012-06-14 21:33:09
+1. Vorrei aggiungere (solo per fare il pasticcio) che le due istruzioni dovrebbero generare lo stesso piano di esecuzione, * tutto il resto è uguale * (cioè analizzato all'incirca nello stesso momento, con le stesse statistiche di tabella, ecc.). Ci sono circostanze (fuori dallo scopo di questa domanda) in cui le due domande potrebbero sembrare dare piani diversi. –