Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Hibernate Query läuft langsam im System, aber schnell, wenn es direkt ausgeführt wird

Aus der Beschreibung Ihres Problems geht hervor, dass Sie auf Parameter-Sniffing stoßen. Im Wesentlichen erstellt SQL Server einen Abfrageplan basierend auf einem älteren Satz von Parameterwerten, die übergeben wurden und keinen effektiven Ausführungsplan für die derzeit ausgeführte Abfrage erstellen.

Normalerweise behebe ich dieses Problem, indem ich die Parameterwerte in lokale Variablen übergebe und diese in meiner Abfrage verwende oder OPTION (RECOMPILE) verwende. Da Sie jedoch Hibernate verwenden, ist meine übliche Lösung keine Option für Sie. So wie ich es verstehe, wird die beste Option sein, Hibernate zu verwenden, um eine native SQL-Abfrage mit PrepareStatement() oder CreateSQLQuery() auszuführen, was leider einige der Vorteile der Verwendung von Hibernate aufhebt.