我們有一個用戶表(MySQL的)12萬行優化Hibernate session.createQuery()。list();
List<User> users = session.createQuery("from User").list();
這Hibernate查詢大約需要6到9秒執行。我們如何優化這個? MySQL是瓶頸嗎?或者是.list()
通常這樣慢?
我們有一個用戶表(MySQL的)12萬行優化Hibernate session.createQuery()。list();
List<User> users = session.createQuery("from User").list();
這Hibernate查詢大約需要6到9秒執行。我們如何優化這個? MySQL是瓶頸嗎?或者是.list()
通常這樣慢?
Ofcourse由於查詢執行全表掃描,所以速度很慢。您應該加入與其關聯的其他對象,包括where
子句的查詢,查詢可以更改爲返回有限數量的記錄或使用標準API和投影。
不幸的是我們需要整個表格。所以我們不能使用條件API或投影或WHERE子句 –
那你別無選擇 –
是mySQL的瓶頸嗎?還是運行tomcat的CPU?或內存? –
在您的查詢中使用分頁。您不應該一次調用所有行。您可以設置結果的第一個位置和最大結果。例如,如果您想要讀取前100個結果,而不是更改您的查詢,請執行以下操作:
Query q=session.createQuery("from User");
q.setFirstResult(fistRes);// this will variable
q.setMaxResults(maxRes);// this will also be variable as parameter.
這將如何幫助?我們需要獲取所有用戶的行...... –
@SaqibAli這會將您的結果分區到不同的頁面。 – Masudul
你會在哪裏顯示結果? – Masudul
@Masud,結果將不會顯示。我們需要結果集進行一些處理。 –