优化器会自动优化这个简单的limit吗

K-dash 2014-06-13 12:48:49
我最近在阅读<高性能MySQL>
它里面提到不要尝试写出太过复杂的自行优化SQL来优化查询,因为优化器已经足够聪明,会自动将你的查询优化成最佳方案

在优化Limit的orderby那里我看到他这样介绍
SELECT film_id,description FROM askila.film ORDER BY title LIMIT 50,5
根据前面的介绍理解这里应该是查询了55行并且丢弃了前面50行数据,它推荐写成以下的优化SQL方式:
SELECT film.film_id,film.description FROM sakila.film INNER JOIN(SELECT film_id FROM sakila.film ORDER BY title LIMIT 50, 5) AS lim USING(film_id)


那么它专门这样讲是因为MySQL并不会自动优化上面的查询语句吗,我觉得人工思考都能思考出下面的优化方案,优化器何以不能呢,是不是因为要检查表结构什么的,不方便在某个点上每次做检查而需要人工优化?

书中提到大概这样的说话:"随着时代的进步,需要告诉MySQL要怎么做事而不是告诉MySQL做什么事的工作已经越来越少了"
按照这句话来说,我觉得应该就是第一句SQL来查询比较妥当,应该用SQL语法告诉MySQL我要什么数据,至于MySQL怎么取这个数据不管,除非很难优化或有些条件不可预料


希望深入了解MySQL的大神能告诉我这种查询到底会不会被优化,一个项目下大把limit查询,我可能得全部改成那个优化形式呀..
...全文
121 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
K-dash 2014-06-16
  • 打赏
  • 举报
回复
引用 3 楼 linwaterbin 的回复:
你的db版本是多少?你的第一种情况在5.6里面可以不必改写,先跑。
看来是5.6或以上才不用手动优化对吗,我是5.1和5.5都有用
linwaterbin 2014-06-14
  • 打赏
  • 举报
回复
你的db版本是多少?你的第一种情况在5.6里面可以不必改写,先跑。
ACMAIN_CHM 2014-06-13
  • 打赏
  • 举报
回复
优化器不可能考虑所有的情况。即使的ORACLE, SQL SERVER仍然需要人工干预。
rucypli 2014-06-13
  • 打赏
  • 举报
回复
人脑一个很简单的想法很可能机器需要很麻烦才能实现

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧