mysql 关于order by的优化
2018-02-02 16:24
399 查看
explain SELECT m.*,u.username nickname,u.vip,u.appid FROM wwj_mingxi m left join wwj_user u on u.id=m.uid WHERE u.appid = 0 ORDER BY m.id desc LIMIT 0,20
花费时间4s
可以看出主要原因是使用了临时表,文件排序。也就是说order by m.id没有走索引。
为什么呢?
这里就要说了mysql有个叫驱动表的东西,如果ORDER BY的列不是驱动表中的列就会产生临时表,而且临时表并没有索引。那么怎么查看驱动表呢?
EXPLAIN 结果中,第一行出现的表就是驱动表(Important!)
这里明显我们的u表是驱动表,但是order by m.id也就造成了临时表以及文件排序。那么怎么优化呢?经过一上午精心专研,访问各大问答网站,翻阅各种资料。终于找到一个语法:
FORCE index(PRIMARY)
什么意思呢?就是强制使用索引!!!!
看一下修改后的sql:
EXPLAIN SELECT m.*,u.username nickname,u.vip,u.appid FROM wwj_mingxi m FORCE index(PRIMARY) join wwj_user u on u.id=m.uid where u.appid=0 order by m.id desc LIMIT 0,20
再来看一下:
卧槽!!!!之前9万多行到现在20行,性能优化最大化!!!!!瞬间爆炸有没有!!!!!
如果你还不能体验他们之间的差距的话,这有两个数据:优化前查询需要使用4s,优化后只需0.001s!!!恐怖如斯。
相关文章推荐
- MySQL中关于insert语句速度的优化
- Mysql group by,order by,dinstict优化
- MySQL 通过索引优化含ORDER BY的语句
- 关于mysql 索引自动优化机制: 索引选择性(Cardinality:索引基数)
- MySQL中order by的实现 和 by rand() 和优化
- 关于MySQL的LIMIT 语法小优化!
- 关于mysql上万条数据同时插入时的性能优化
- 通过索引优化含ORDER BY的MySQL语句
- MySQL如何优化ORDER BY
- MySQL查询优化:连接查询排序limit(join、order by、limit语句)介绍
- MySQL如何利用索引优化ORDER BY排序语句
- 关于MySQL中复合索引优化
- 【mysql】一个关于order by排序的问题
- MySQL查询优化:连接查询排序limit(join、order by、limit语句)
- 关于mysql的limit用于分页查询的优化
- mysql关于通配符%%的优化
- 关于SSM+mysql框架大数据量的支持优化
- 关于MySQL 服务器优化技巧手册
- MySQL中order by中关于NULL值的排序问题
- 关于数据库order by 的优化