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

Hibernate Query viene eseguito lentamente nel sistema, ma veloce quando eseguito direttamente

Dalla descrizione del tuo problema, sembra che tu stia riscontrando lo sniffing dei parametri. In sostanza, SQL Server crea un piano di query basato su un set precedente di valori di parametro che sono stati passati e che non creano un piano di esecuzione efficace per la query attualmente in esecuzione.

In genere risolvo questo problema passando i valori dei parametri nelle variabili locali e usando quelli nella mia query o usando OPTION (RICIMPILA). Tuttavia, dal momento che stai usando Hibernate, la mia solita soluzione non è un'opzione per te. A quanto ho capito, l'opzione migliore sarà utilizzare Hibernate per eseguire una query SQL nativa utilizzando prepareStatement() o createSQLQuery() che, sfortunatamente, rimuove alcuni dei vantaggi dell'utilizzo di Hibernate.