請問,如何規避在foreach中運算元據庫,或者批量查詢?

時間 2021-06-04 10:18:46

1樓:

其實各主流php框架都有這些細節的處理,國內yii用的多的話看文件唄:http://www.

拉到下面with語法,具體sql細節就是一次拿節約tcp來回消耗唄。

2樓:Lance Zhang

賈俊俊 答案裡面for裡面new物件的那個例子是錯的

最佳的方式應該是

new 物件a

for(x:y)

這樣寫,for外面new物件沒意義,按照一般邏輯而言,裡面引用的物件實際上還是每次迴圈不同(一般都是new出來);

其實想要完全避免在迴圈裡面訪問資料庫基本做不到,這跟業務邏輯有關係,不同情況有不同的優化方式,下面寫幾個常見情況

1.獲取乙個表,再遍歷獲取子表

寫多表關聯,一次把父子表資料都取出來;

如果子表資料很多重複,可以使用乙個map存放所有已經獲取過的子表資料,用主鍵作為key,這樣可以避免獲取重複資料;

如果子表資料很少更新,直接在獲取子表的方法做快取;

2.迴圈插入n行資料

使用batchupdate做優化

3.非常複雜的n表查詢,表資料非常多

這種情況下,多表關聯反而不一定好,一般在定時任務之類對響應時間要求不高的場合,適當在迴圈裡面去訪問資料庫反而更好

4.傳入乙個主鍵list,獲取對應行

賈俊俊 答案中的做法,迴圈拼接sql,但要注意

sql注入問題,建議使用mybatis等orm工具繫結多個變數

oracle in 的數量限制或者mysql的sql長度限制,這個可以有很多解決方法,比如換成or、使用臨時表等,不過還是應該盡量避免list過大的問題

在哲學作品的評鑑中,如何規避偏見?

星群 我記得以前看過一本物理科學史,裡面有乙個觀點讓我印象特別深刻,大致的意思是 物理學上許多顛覆式的突破,都不是某個科學理論讓整個學界心服口服,而是老一輩人死的七零八落以後,新一代人佔據了話語權之後,那個理論才得以獲得廣袤的土地從而成長為蒼天大樹。就這點來看,這可能不是乙個哲學問題,而是乙個如何進...

在挽回男朋友的過程中如何規避友誼誤區?

雲也 多為他讀莎士比亞少跟他談馬克思選集,此其一也。情人節和七夕的時候和他單獨吃飯,其二也。古人云,一法通,萬法通。幫你舉兩個例子了,夠了。旁通活用去吧。 馬鹿人 甩掉了義務,還享受到了權利 em 你可能得退出他的生活一段時間了。乙個周的斷聯沒什麼意義,只要你倆還能見面。關鍵在於,你可以跟其他異性走...

裝修中的抗有哪些,如何規避?

裝滿陽光的橘子 一般水電改造會有預收,千萬不要預收,會要很多最後,一定要提前定死,而且定好後的插座在想加會收費,如果提前知道這些可以免費加的,因為他們賺的這一項錢加幾個開關插座是綽綽有餘的。 Seven劉 裝修對比無非分為三個部分去進行對比 1.裝修公司品牌建議是找大公司,在當地有一定影響力的,做過...