关于mysql的limit语句优化后与优化前没有区别的疑问

qq_29467313 2017-08-13 12:34:35
大家好,小弟最近在看《高性能mysql一书》,其中看到该书上一个关于优化limit查询的sql语句写法,于是便跃跃欲试建了张测试表,然后往里面插入了一百多万条数据,下面是我测试的三条sql语句:
①最普通的写法
select * from test2 limit 1000000, 100;

②《高性能mysql》一书的写法:
select *
from (select no from test2 limit 1000000, 100) as A natural join test2

③网上一些教程的写法:
select *
from no >=
(select no from test2 order by no limit 1000000,1)
limit 100

然而最终结果却让我有点失望,后两条语句在navicat上手动执行并没有比第一条快,①和③的执行时间都是二点多秒,而②则夸张的去到了四点多秒,而且重复了很多次都是一样的结果。之后想想觉得可能是软件的耗时数据不准确,于是又打开Apache jmeter进行jdbc测试,开10个线程每个线程执行100次,可是最终结果依然很让人困惑,②语句没有像之前那么夸张落后那么多了,可是三条语句的平均耗时、耗时中位数以及每秒操作次数都没太大差别(甚至第①条还略微领先一丢丢),这完全不像书上以及网上教程说得那样“大大提高查询性能”啊,请问一下各位是我的测试方法有问题还是?
...全文
1606 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
AHUA1001 2019-08-20
  • 打赏
  • 举报
回复
你说的那本书我也有,貌似是书皮上,印了一只鸟,或者是鹰。内容我觉得很一般。 SQL的优化,还是要多实验,书上的内容,有一些不大靠谱,讲真,好多高手,是不会有时间出书的。 特别是一些外国人写的书,内容可能不错,但是翻译成中文,基本就没法看了。 我可以给你推荐一本我觉得不错的书,但是是ORACLE的——《Oracle查询优化改写技巧与案例》。
it_java丨 2019-07-16
  • 打赏
  • 举报
回复
单表查询当然看不出来差距,你联表查询试试。效率不要高太多!
qq_29467313 2017-08-13
  • 打赏
  • 举报
回复
引用 1 楼 hongmei85 的回复:
2是在1的基础上加join,怎么会更快? 3要在no上加索引
------------------------------------------------------------------------------- 第一个问题,书上的说法是这涉及到一个“延迟加载”的问题,就是一开始只查找符合条件的行记录的主键,找到所有的主键之后再进行连接从而加载出剩余的数据,这样可以“减少数据的加载量”。 第二个问题,看我字段命名就知道了吧,no本身就是一个主键,所以已经建有索引了。
hongmei85 2017-08-13
  • 打赏
  • 举报
回复
2是在1的基础上加join,怎么会更快? 3要在no上加索引

8,028

社区成员

发帖
与我相关
我的任务
社区描述
高性能数据库开发
社区管理员
  • 高性能数据库开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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