您的位置:首页 > 数据库 > MySQL

mysql 中 order by 优化

2015-05-07 17:03 381 查看
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 条件字段建立复合索引!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: