L'optmiser fa un lavoro abbastanza buono per l'uso quotidiano. Tuttavia, in teoria potrebbero essere necessarie 3 settimane per trovare il piano perfetto all'estremo, quindi c'è la possibilità che il piano generato non sia l'ideale.
Vorrei lasciarlo da solo a meno che non si disponga di una query molto complessa o di enormi quantità di dati in cui semplicemente non è possibile produrre un buon piano. Allora lo considererei.
Ma nel tempo, man mano che i dati cambiano/aumentano o cambiano gli indici, il tuo suggerimento JOIN diventa obsoleto e impedisce un piano ottimale. Un suggerimento JOIN può solo ottimizzare per quella singola query al momento dello sviluppo con quel set di dati che hai.
Personalmente, non ho mai specificato un suggerimento JOIN in alcun codice di produzione.
In genere ho risolto un errore di inserimento cambiando la query, aggiungendo/modificando un indice o scomporlo (ad esempio, prima carica una tabella temporanea). O la mia query era semplicemente sbagliata, o avevo una conversione implicita del tipo di dati, o evidenziava un difetto nel mio schema ecc.
Ho visto altri sviluppatori usarli ma solo dove avevano viste complesse nidificate su viste complesse e hanno causato problemi successivi quando hanno refactored.
Edit:
ho avuto una conversione oggi, dove alcuni colleghi stanno per usarli per forzare un piano di query cattivo (con NOLOCK e MAXDOP 1) di "incoraggiare" la migrazione da legacy complesso viste nidificate che uno dei il loro sistema a valle chiama direttamente.
Modifica Sto per aggiungere un OPTION (MAXDOP 1) per impedire a un addetto al background di masticare tutta la potenza del processore. – Joshua