當前我們從Spring SimpleJdbcTemplate中檢索對象列表。第一個查詢是select *來檢索所有我們想要成爲我們的「鍵」的記錄。然後,這導致對集合的foreach循環,這反過來涉及N個查詢返回到數據庫,其中N是List的大小。做這些N個查詢還是做兩個大的select *語句並通過一個執行if語句的for循環映射它們會更有效率嗎?請參見下面的代碼:數據映射優化:X數據庫查詢與Y Java if語句
N Queries
List keyList = Select * from keyTable;
for(Object o: keyList)
{
List valueList = Select * from valueTable;
//Map valueTable to keyTable via rowmapper
}
Y Java if statements
List keyList = Select * from keyTable;
List valueList = Select * from valueTable;
for(Object o: keyList)
{
for(Object z : valueList)
{
if(z.key == o.key) //set the value
}
}
未經測試的代碼我想這是做到這一點的一種方式。這個問題似乎是我們在調用函數時會花費很多時間,因爲它會向數據庫伸出很多次。我不確定上述情況是否會解決問題,因爲仍然存在需要發生的內部映射。但感謝您的答案。 – Woot4Moo 2011-06-14 15:42:57
你一定要避免應用程序和數據庫服務器之間的往返。你的第一個例子有N + 1次旅行,第二次旅行有2次旅行,我的想法有1次。如果往返時間是往返時間,那麼最小化這些(並且1並不比2好);如果處理檢索的數據是一直需要的,那麼您需要專注於優化。 – 2011-06-14 15:47:49
同樣如此。我會嘗試實施你的解決方案,看看我得到了什麼樣的初始收益。就目前而言,我們處在2+分鐘範圍內的某個地方,它只有60個條目在數據庫中。 – Woot4Moo 2011-06-14 15:50:09