mysql 中 order by 优化

1.order by 在mysql 查询中会影响查询的效率


select 
a.breed_name,
a.id,is_vip,
a.type_id from ml_seedling a join ml_user b on a.supplier_id = b.id
join ml_nursery c on  a.n_id=c.id and a.s_status = 1 AND a.is_old=0 AND 
b.u_status = 1 AND a.price >0 
and a.breed_name like '%银杏%' and a.breed_id = 362 order by is_vip DESC, a.create_time DESC limit 0,20 


1.如果 不加order by 速度很快 

2.order by 后用字段s_status 速度也很快(n_id 和s_status 做了联合索引)

总结:1

order by 后的字段,如果要走索引,须与where 条件里的某字段建立复合索引!!或者说orcer by后的字段如果要走索引排序,它要么与where 条件里的字段建立复合索引【这里建立复合索引的时候,需要注意复合索引的列顺序为(where字段,order by 字段),这样才能满足最左列原则,原因可能是order by字段并能算在where 查询条件中!】,要么它自身要在where 条件里被引用到!

总结:2

表a       id为普通字段,上面建有索引 

select * from a order by id   (用不上索引)

select id from a order by id (能用上索引)

select * from a where id=XX order by id  (能用上索引)

意思是说order by 要避免使用文件系统排序,要么把order by的字段出现在select 后,要么使用order by字段出现在where 条件里,要么把order by字段与where 条件字段建立复合索引!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值