一、两表关联查询-分页
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