18年程式員面試,23年程式員面試。
假如搜尋的表很大,進行分頁的時候limit100萬會加載很慢,那麼你是怎麼解決的呢?
好的面試官這個問題在生産環境也是比較常見的。limit m.n其實是去掃描m加n條資料,然後過濾掉前面的m條資料。當m越大的時候需要掃描的資料也就越多,性能也會越來越慢。針對這種情況有以下幾種方案是可以進行一定的優化的。
·第一種如果ID是趨勢遞增的,那麼每次查詢都可以傳回這一次查詢的最大ID,然後下次查詢的時候加上大于上次最大ID的條件,這樣會通過主界索引去掃描并且掃描的數量會少很多很多,因為隻需要去掃描where條件的資料就可以了。
另外我準備了一份加瓦程式員求職突擊手冊,裡面包含了簡單模闆熱門面試題以及彈性技巧。如果有需要大家可以在評論區留言領取。
·第二種那麼先limit出來主鍵ID,然後用主表跟查詢出來的ID進行nnerjidn内連接配接,這樣也能一定程度上面去提速。因為減少了回表,查詢ID隻需要去走聚集索引就可以了。
·第三種如果mysql級别優化不了了,也可以對分頁的資料進行緩存,比如Redis緩存,資料進行變動的時候,那麼隻要去做好緩存依賴即可。
·第四種從業務的角度去進行優化,因為越往後一般使用者行為會觸及不到,比如去逛TB,那麼不會去看後面幾百頁的資料。是以業務層面如果可以做一定的讓步的話,那麼就可以不用去做後面幾百頁的資料分頁了。