從 MySQL 執(zhí)行原理告訴你:為什么分頁場景下,請求速度非常慢?
從一個問題說起
答案的追尋
確認場景
小白作答
繼續(xù)解答

系統(tǒng)學(xué)習(xí)
聚簇索引:包含主鍵索引和對應(yīng)的實際數(shù)據(jù),索引的葉子節(jié)點就是數(shù)據(jù)節(jié)點 輔助索引:可以理解為二級節(jié)點,其葉子節(jié)點還是索引節(jié)點,包含了主鍵id。


觸類旁通
DataSource 這個就是數(shù)據(jù)源,也就是表,select * from t 里面的 t。 Selection 選擇,例如 select xxx from t where xx = 5 里面的 where 過濾條件。 Projection 投影, select c from t 里面的取 c 列是投影操作。 Join 連接, select xx from t1, t2 where t1.c = t2.c 就是把 t1 t2 兩個表做 Join。
select b from t1, t2 where t1.c = t2.c and t1.a > 5變成邏輯查詢計劃之后,t1 t2 對應(yīng)的 DataSource,負責(zé)將數(shù)據(jù)撈上來。
怎么解決
《高性能MySQL》提到了兩種方案
方案一
方案二
select xxx,xxx from in (select id from table where second_index = xxx limit 10 offset 10000)這句話是說,先從條件查詢中,查找數(shù)據(jù)對應(yīng)的數(shù)據(jù)庫唯一id值,因為主鍵在輔助索引上就有,所以不用回歸到聚簇索引的磁盤去拉取。再通過這些已經(jīng)被limit出來的10個主鍵id,去查詢聚簇索引。這樣只會十次隨機io。寫在最后
來源:juejin.im/post/5c4db295e51d4503834d9c43
本文版權(quán)歸原作者所有,如有問題請聯(lián)系我刪除。

評論
圖片
表情
