Ich verwende Hibernate mit Ansichten (Annotation @ Subselect und @ Synchronize) und Filter. Das Problem ist die Abfrage für den Winterschlaf (durch die Eigenschaft 'value' der Annotation @Subselect definiert) und die Leistung wird sehr langsam.Wie verschachtelte Abfrage im Ruhezustand mit Ansichten und Filtern zu vermeiden
Zum Beispiel, wenn ich meine eigene SQL-Abfrage schreiben (die mehr als 100 ms nicht auszuführen nimmt) ist dies wie folgt aus:
SELECT id,
country_id,
firstName,
lastName
FROM client
WHERE client.country_id IN (2564,2558,1452,3652)
Aber wenn ich mit Filtern mit Hibernate, die erzeugte Abfrage wird :
SELECT _this.id AS id1_0_0,
_this.country_id AS country_id2_0_0
_this.firstName AS firstName3_0_0,
_this.lastName AS lastName4_0_0
FROM (
SELECT id,
country_id,
firstName,
lastName
FROM client
) _this
WHERE _this.country_id2_0_0 IN (2564,2558,1452,3652)
Dies bedeutet, dass der durch den Ruhezustand erzeugten SQL ist langsamer als meine SQL-Abfrage mit der Hand geschrieben, da alle Zeilen der ‚Kunden‘ Tabelle (in verschachtelter query) geladen werden, und die Filteroperation ist im übergeordneten Abfrage ausgeführt nachdem alle Zeilen geladen sind, ist das dumm und sehr langsam Leistungen (1,7 sec vs weniger als 100ms). Also, kennt jemand eine Methode, um das zu vermeiden?
Could postest du deine '@ Subselect' Definition? –
@Subselect ist die Annotation, die einer Klasse/einem Feld hinzugefügt wird (tatsächlich wird sie passend benannt). Aber warum gelten Filter nicht für die geschachtelte Abfrage? – SnakePlissken
Jeder anständige Optimierer sollte die äußere Bedingung in die abgeleitete Tabelle schieben, d. H. Die zweite Abfrage in die erste umschreiben. Was ist dein DBMS? – dnoeth