Dato che l'ottimizzatore non può richiedere tutto il tempo necessario (deve ridurre al minimo i tempi di esecuzione e non contribuire ad esso) per esplorare tutti i possibili piani di esecuzione che a volte vengono interrotti.
Mi chiedevo se questo può essere ignorato in modo da poter dare all'ottimizzatore tutto il tempo necessario (o una certa quantità di millisecondi).
Non ho bisogno di questo (atm), ma posso immaginare uno scenario in cui una query complessa viene eseguita in un ciclo stretto e si desidera elaborare il piano ottimale e memorizzarlo nella cache in anticipo.
Certo che hai un ciclo stretto dovresti riscrivere la query in modo che vada via ma abbi pazienza con me.
Questa è più una domanda per curiosità e anche per vedere se a volte c'è una differenza tra un'ottimizzazione in corto circuito e una completa.
Si scopre che è possibile concedere all'ottimizzatore più tempo con il flag di traccia 2301. Non è esattamente quello che stavo chiedendo ma si avvicina.
Le migliori informazioni che ho trovato su questo sono nelle estensioni di modellazione del processore di query in SQL Server 2005 SP1 di Ian Jose.
Usa questo flag di traccia con cura! Ma può essere utile quando si escogitano piani migliori. Guarda anche:
- Articoli taggati "livello di ottimizzazione" di Grant Fritchey.
- Prima di eseguire l'aggiornamento a SQL Server 2008 ... di Brent Ozar.
- Opzioni di ottimizzazione per SQL Server durante l'esecuzione di carichi di lavoro ad alte prestazioni da parte del supporto Microsoft.
Stavo pensando a query con molti join in cui lo spazio della soluzione per l'ordine dei join esplode in modo esponenziale. L'euristica che utilizza SQL Server è piuttosto buona, ma mi chiedevo se l'ottimizzatore avrebbe proposto un ordine diverso se avesse avuto più tempo (nell'intervallo di secondi o addirittura minuti).