2017-06-16 39 views
0

目前我有一個實現10到10秒的10萬條記錄。這個查詢的性能可以提高,怎麼樣?下面是根據QueryDSL和JPA 2如何使用JPA 2和QueryDSL高效獲取數以千計的數據庫記錄?

public List<EntryEntity> getEntries() { 

QEntryEntity qEntryEntity = QEntryEntity.entryEntity; 

return queryfactory.selectFrom(qEntryEntity).orderBy(qEntryEntity.name.asc()).fetch(); 
} 
+2

什麼讓你不能用普通的SQL來做這件事? –

+0

如果** orderBy(qEntryEntity.name.asc())**排序是由java完成的,則從本地機器數據庫獲取數據需要大約3分鐘的時間。 – Naresh

+0

我有我的老年人在QueryDSL和JPA中執行此操作的特定要求,而無需使用任何本機查詢。 – Naresh

回答

3

你可能缺少對NAME列的索引我的代碼片段:

CREATE INDEX solve_all_problems ON entry_entity (name); 

這種運作良好,因爲指數前期訂單的所有數據因爲它是一個有序的數據結構,所以當你運行一個類似你現在運行的查詢時,數據庫不再需要做任何排序工作。 Use-the-index-luke has a nice explanation on this topic

備註:小心添加索引。雖然他們大大加快了讀取操作,但每個索引都會減慢對該列的寫入操作。每個指標都是一個折衷。

相關問題