我在DB下表:質疑DB是快,但JPARepository讀取速度慢
Person
, Parent
, GrandParent
Parent - Person
是OneToMany
關係(Person
已經parentId
) GrandParent - Parent
是ManyToMany
關係(grandparent_parent
表)
我在PersonRepository
中創建,它擴展JPARepository
:
@Query("SELECT person.uuid FROM Person person JOIN person.parent parent JOIN parent.grandparents grandparent WHERE grandparent.uuid = ?1")
Set<String> findByGrandParentId(final String parentId);
用於獲取Person
的所有ID,它們在給定的GrandParent
下。 該SQL創建:
SELECT
person0_.uuid as col_0_0_
FROM
person person0_
INNER JOIN
parent parent1_
on person0_.parentid=parent1_.uuid
INNER JOIN
grandparent_parent grandaparent_parent2_
on parent1_.uuid=grandaparent_parent2_.parentid
INNER JOIN
grandparent parent3_
on grandaparent_parent2_.grandparentid=parent3_.uuid
WHERE
parent3_.uuid='13906f55-441c-45bd-bef6-8beefa4119c4'
我登錄庫需要多少時間獲取數據,並花了(平均)〜400ms的獲取〜400記錄。 然後我在DB上執行相同的SQL查詢,每次查詢花費的時間不超過50ms。
我知道,這產生的查詢不優化,因爲我們只能在連接兩個表GRANDPARENT_PARENT
和PERSON
,但在這裏,這不是問題,因爲還執行以下50ms的這樣的查詢。
爲什麼我在通過存儲庫獲取和在db中獲取之間存在這樣的差異?是否有可能解決這個問題?
1.正如我所說,我可以將它更改爲一個連接,但查詢很好,正如您所描述的。 – ByeBye
2,3。正如你所看到的,我只讀取了id,沒有任何地方的LazyLoading – ByeBye
4.不,我從外部機器遠程執行它 – ByeBye