項目中某個部分需要按照前端頁面選擇的條件進行數據庫查詢,如下圖:
我的查詢方法是:第一步:先根據地點、時間等條件拿到所有符合的結果,(不加入人員屬性的條件)第二步:然后再遍歷這個集合,從中挑選出所有符合我人員屬性的結果,此處人員屬性是可以多選的,而且要查出的是包含我所選擇屬性的所有結果。
按照這個方法進行查詢獲得數據總量大約在4萬條左右,這時候php會報錯:Allowed memory size of 134217728 bytes exhausted (tried to allocate 4194304 bytes)根據報錯信息,大概是我查詢的數據據兩在內存中所占用的空間太大,超出了php默認的128M內存。也就是說,當第一步完成后,此時所有數據已經超出內存限制了。。。
有以下幾個問題請問各位大佬指點:1.除了增加php默認內存(比如改為512M的確可以解決這個問題),還有其他方法嘛?因為感覺這個方法治標不治本??!2.有沒有更好的查詢邏輯呢?我的邏輯總結下就先查出所有的結果在進行篩選,有沒有可能把人員屬性篩選條件也加進去一起查出來再進行分頁操作呢?如果可以加進去,怎么做呢?
ps:我看京東或淘寶這種電商網站也存在對某個屬性進行多選的篩選情況,不知道他們是怎么實現的呢?
2 回答

達令說
TA貢獻1821條經驗 獲得超6個贊
第一步:先根據地點、時間等條件拿到所有符合的結果,(不加入人員屬性的條件)
第二步:然后再遍歷這個集合,從中挑選出所有符合我人員屬性的結果,此處人員屬性是可以多選的,而且要查出的是包含我所選擇屬性的所有結果。
從你的這個描述邏輯來看,沒人會把幾萬條數據查詢出來放在內存中的,這樣內存溢出很正常。
目前我們的電商系統,都是構造好所有查詢參數,再去數據庫分頁取數據,同時對查詢條件和結果進行緩存處理。
- 2 回答
- 0 關注
- 1143 瀏覽
添加回答
舉報
0/150
提交
取消