mysql-簡單的sql優化
阿新 • • 發佈:2019-01-11
一、兩表關聯查詢-分頁
a表資料20W,B表資料5條
① 這一種效率很低,一個索引沒用上,基本上全表,再關聯B表5條資料、效率很低,執行時間2s
select * from nmd_apply_info a, channel_info b
where 1=1 and a.app_id = b.app_id ORDER BY create_time DESC LIMIT 0,10
②第二種方式,查詢出想要的十條以後,再和B表匹配,效率顯著提升,執行時間幾十毫秒到上百毫秒
SELECT * FROM ( SELEC * FROM nmd_apply_info WHERE 1 = 1 ORDER BY create_time DESC LIMIT 0, 10 ) a LEFT JOIN channel_info b ON a.app_id = b.app_id
③ 第三條sql
按照我的理解:結果按照時間排序,如果不加第二行強制使用時間索引,速度回很慢2S左右,用了以後幾十毫秒(10w左右的資料用索引非常快),
但是如果用主鍵匹配查詢時候,可能強制使用了時間索引,導致只能進行非索引查詢,這個時候匹配一條也很慢,必須關掉強制索引
SELECT * FROM nmd_apply_info n -- FORCE INDEX ( apply_info_create_time_index ) LEFT JOIN channel_info c ON n.app_id = c.app_id WHERE 1 = 1 -- and apply_no = '主鍵索引' ORDER BY n.create_time DESC LIMIT 0, 10