mysql-简单的sql优化

一、两表关联查询-分页

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值