Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

La stessa query SQL richiede più tempo per essere eseguita in un DB rispetto a un altro DB nello stesso server

Il fatto di avere due database sullo stesso server e con lo stesso set di dati (come hai detto tu) non garantisce lo stesso piano di esecuzione.

Ecco alcuni dei motivi per cui il piano di query potrebbe essere diverso:

  • I file mdf e ldf (per ogni database) si trovano su unità diverse. Se onedrives è più veloce, anche quel database eseguirà la query più velocemente.
  • statistiche in stallo. Se hai un database con statistiche più recenti rispetto all'altro, SQL ha maggiori possibilità di scegliere un piano di esecuzione corretto (e
    più veloce).
  • Indici:so che hai detto che sono entrambi identici, ma vorrei controllare se hai lo stesso tipo di indici su entrambi.

Concentrati sul motivo per cui la query è lenta o sul piano di esecuzione effettivo, invece di confrontare. Il controllo del piano di esecuzione effettivo per la query lenta ti darà un'idea del motivo per cui l'esecuzione è più lenta.

Inoltre, non aggiungerei un'istruzione NO LOCK per risolvere il problema. In base alla mia esperienza, la maggior parte delle query lente può essere ottimizzata tramite codice o indice, invece di aggiungere un suggerimento NO LOCK che potrebbe farti modificare o ottenere vecchi set di risultati, a seconda delle tue transazioni.