2013-10-05 37 views
1

我們有一個用戶表(MySQL的)12萬行優化Hibernate session.createQuery()。list();

List<User> users = session.createQuery("from User").list(); 

這Hibernate查詢大約需要6到9秒執行。我們如何優化這個? MySQL是瓶頸嗎?或者是.list()通常這樣慢?

+0

你會在哪裏顯示結果? – Masudul

+0

@Masud,結果將不會顯示。我們需要結果集進行一些處理。 –

回答

1

Ofcourse由於查詢執行全表掃描,所以速度很慢。您應該加入與其關聯的其他對象,包括where子句的查詢,查詢可以更改爲返回有限數量的記錄或使用標準API和投影。

+0

不幸的是我們需要整個表格。所以我們不能使用條件API或投影或WHERE子句 –

+0

那你別無選擇 –

+0

是mySQL的瓶頸嗎?還是運行tomcat的CPU?或內存? –

1

在您的查詢中使用分頁。您不應該一次調用所有行。您可以設置結果的第一個位置和最大結果。例如,如果您想要讀取前100個結果,而不是更改您的查詢,請執行以下操作:

Query q=session.createQuery("from User"); 
q.setFirstResult(fistRes);// this will variable 
q.setMaxResults(maxRes);// this will also be variable as parameter. 
+0

這將如何幫助?我們需要獲取所有用戶的行...... –

+0

@SaqibAli這會將您的結果分區到不同的頁面。 – Masudul