全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SELECT*FROMtableLIMIToffset,rows|rowsOFFSEToffset mysqlSELECT*FROMtableLIMIT5,10;/检索记录行6-15/为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为-1:mysqlSELECT*FROMtableLIMIT95,-1;/检索记录行96-last./如果只给定一个参数,它表示返回最大的记录行数目:mysqlSELECT*FROMtableLIMIT5;/检索前5个记录行/换句话说,LIMITn等价于LIMIT0,n。select * from table LIMIT 5,10; #返回第6-15行数据select * from table LIMIT 5; #返回前5行select * from table LIMIT 0,5; #返回前5行1、offset比较小的时候。select * from yanxue8_visit limit 10,10多次运行,时间保持在0.0004-0.0005之间Select * From yanxue8_visit Where vid =(Select vid From yanxue8_visit Order By vid limit 10,1) limit 10多次运行,时间保持在0.0005-0.0006之间,主要是0.0006结论:偏移offset较小的时候,直接使用limit较优。这个显然是子查询的原因。2、offset大的时候。select * from yanxue8_visit limit 10000,10多次运行,时间保持在0.0187左右Select * From yanxue8_visit Where vid =(Select vid From yanxue8_visit Order By vid limit 10000,1) limit 10多次运行,时间保持在0.0061左右,只有前者的1/3。可以预计offset越大,后者越优。性能优化:基于MySQL5.0中limit的高性能,我对数据分页也重新有了新的认识.1.Select * From cyclopedia Where ID=(Select Max(ID) From (Select ID From cyclopedia Order By ID limit 90001) As tmp) limit 100;2.Select * From cyclopedia Where ID=(Select Max(ID) From (Select ID From cyclopedia Order By ID limit 90000,1) As tmp) limit 100;同样是取90000条后100条记录,第1句快还是第2句快?第1句是先取了前90001条记录,取其中最大一个ID值作为起始标识,然后利用它可以快速定位下100条记录第2句择是仅仅取90000条记录后1条,然后取ID值作起始标识定位下100条记录第1句执行结果.100 rows in set (0.23) sec第2句执行结果.100 rows in set (0.19) sec很明显第2句胜出.看来limit好像并不完全像我之前想象的那样做全表扫描返回limit offset+length条记录,这样看来limit比起MS-SQL的Top性能还是要提高不少的.其实第2句完全可以简化成Select * From cyclopedia Where ID=(Select ID From cyclopedia limit 90000,1)limit 100;直接利用第90000条记录的ID,不用经过Max运算,这样做理论上效率因该高一些,但在实际使用中几乎看不到效果,因为本身定位ID返回的就是1条记录,Max几乎不用运作就能得到结果,但这样写更清淅明朗,省去了画蛇那一足.可是,既然MySQL有limit可以直接控制取出记录的位置,为什么不干脆用Select * From cyclopedia limit 90000,1呢?岂不更简洁?这 样想就错了,试了就知道,结果是:1 row in set (8.88) sec,怎么样,够吓人的吧,让我想起了昨天在4.1中比这还有过之的高分.Select * 最好不要随便用,要本着用什么,选什么的原则, Select的字段越多,字段数据量越大,速度就越慢. 上面2种分页方式哪种都比单写这1句强多了,虽然看起来好像查询的次数更多一些,但实际上是以较小的代价换取了高效的性能,是非常值得的.第1种方案同样可用于MS-SQL,而且可能是最好的.因为靠主键ID来定位起始段总是最快的.Select Top 100 * From cyclopedia Where ID=(Select Top 90001 Max(ID) From (Select ID From cyclopedia Order By ID) As tmp)但不管是实现方式是存贮过程还是直接代码中,瓶颈始终在于MS-SQL的TOP总是要返回前N个记录,这种情况在数据量不大时感受不深,但如果成百上千万,效率肯定会低下的.相比之下MySQL的limit就有优势的多,执行:Select ID From cyclopedia limit 90000Select ID From cyclopedia limit 90000,1的结果分别是:90000 rows in set (0.36) sec1 row in set (0.06) sec而MS-SQL只能用Select Top 90000 ID From cyclopedia 执行时间是390ms,执行同样的操作时间也不及MySQL的360ms.-LIMIT 思考PERCONA PERFORMANCE CONFERENCE 2009上,来自雅虎的几位工程师带来了一篇”Efficient Pagination Using MySQL“的报告,有很多亮点,本文是在原文基础上的进一步延伸。首先看一下分页的基本原理:mysql explain SELECT * FROM message ORDER BY id DESC LIMIT 10000, 20G* 1. row *id: 1select_type: SIMPLEtable: messagetype: indexpossible_keys: NULLkey: PRIMARYkey_len: 4ref: NULLrows: 10020Extra:1 row in set (0.00 sec)limit 10000,20的意思扫描满足条件的10020行,扔掉前面的10000行,返回最后的20行,问题就在这里,如果是limit 100000,100,需要扫描100100行,在一个高并发的应用里,每次查询需要扫描超过10W行,性能肯定大打折扣。文中还提到limit n性能是没问题的,因为只扫描n行。文中提到一种”clue”的做法,给翻页提供一些”线索”,比如还是SELECT * FROM message ORDER BY id DESC,按id降序分页,每页20条,当前是第10页,当前页条目id最大的是9527,最小的是9500,如果我们只提供”上一页”、”下一页”这样的跳转(不提供到第N页的跳转),那么在处理”上一页”的时候SQL语句可以是:SELECT * FROM message WHERE id 9527 ORDER BY id ASC LIMIT 20;处理”下一页”的时候SQL语句可以是:SELECT * FROM message WHERE id 9500 ORDER BY id DESC LIMIT 20;不管翻多少页,每次查询只扫描20行。缺点是只能提供”上一页”、”下一页”的链接形式,但是我们的产品经理非常喜欢”这样的链接方式,怎么办呢?如果LIMIT m,n不可避免的话,要优化效率,只有尽可能的让m小一下,我们扩展前面的”clue”做法,还是SELECT * FROM message ORDER BY id DESC,按id降序分页,每页20条,当前是第10页,当前页条目id最大的是9527,最小的是9500,比如要跳到第8页,我看的SQL语句可以这样写:SELECT * FROM message WHERE id 9527 ORDER BY id ASC LIMIT 20,20;跳转到第13页:SELECT * FROM message WHERE id 9500 ORDER BY id DESC LIMIT 40,20;原理还是一样,记录住当前
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025江苏省农业科学院第一批招聘工作人员12人笔试考试参考试题附答案解析
- 高速公路工程项目规划设计方案
- 2025福建三明市人力资源和社会保障局“扬帆绿都圆梦三明”事业单位紧缺急需人才专场招聘活动24人笔试考试参考题库附答案解析
- 广东湛江市大成中学2025年化学高二第一学期期末监测模拟试题含解析
- 一级建造师公路工程继续教育课程及学习资料
- 武汉理工大学《食品感官分析》2024-2025学年第一学期期末试卷
- 2026年中国沙蟹项目经营分析报告
- 2026年中国三通接头项目经营分析报告
- 2025广东阳江阳西县卫生健康系统选调事业单位工作人员5人笔试考试参考题库附答案解析
- 旅游公司行程规划与执行方案
- 国家开放大学《现代教育管理专题》平时作业1-5参考答案
- 动火证施工现场动火证申请书
- 【管理会计师专业能力中级考试案例】
- 呼麦专题知识
- 中考语文非连续性文本阅读10篇专项练习及答案
- 新闻学概论5:新闻与信息、宣传、舆论
- DB31-T 1343-2022 医用超声探头消毒卫生要求
- 24、小数加减法整理和复习课件苏教版五上数学
- 04-电缆绝缘电阻测试记录表
- 货代新手培训材料
- 《罗织经》全文及翻译
评论
0/150
提交评论