Görünümler (annotation @Subselect ve @Synchronize) ile hibernate kullanıyorum ve filtreler. Sorun, hazırda bulunan kapsülleyme sorgusudur (@Subselect ek açıklamasının 'value' özelliğiyle tanımlanır) ve performanslar çok yavaş olur. Ben (yürütmek için fazla 100ms alır etmez) Kendi SQL sorgusu yazma ÖrneğinGörünüm ve filtrelerle hazırda bekletme sorgusu nasıl engellenir?
, bu böyledir: Ben filtreleri ile hazırda bekleme kullanılıyorsa
SELECT id,
country_id,
firstName,
lastName
FROM client
WHERE client.country_id IN (2564,2558,1452,3652)
Ama oluşturulan sorgu olacak :
Bu (iç içe sorguda) 'müşteri' tablosunun tüm satırları yüklenir çünkü hazırda tarafından oluşturulan SQL elle yazılmış benim sql sorgusu daha yavaştır ve filtre işlemi ana sorguda infaz anlamına gelirSELECT _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)
tüm satırları yükledikten sonra, bu aptalca ve çok yavaş performansları (1.7sec vs 100ms daha az). Yani, bunu önlemek için bir yöntem bilen var mı?
Olabilir daha fazla tabloları ilişkin temel bilgi, db sürümü ve açıklamalı sınıfları) sahip olması gerekir için @ Subselect'in tanımını gönderiyor musunuz? –
@Subselect, bir sınıf/alan üzerinde eklenmiş ek açıklamadır (gerçekten uygun bir şekilde adlandırılmıştır). Ancak filtreler iç içe geçmiş sorgu için neden geçerli değildir? – SnakePlissken
Her iyi düzenleyici, dış durumu Türetilmiş Tabloya itmeli, yani 2. sorguyu 1.ye yeniden yazmalıdır. DBMS'niz nedir? – dnoeth