一,最常见MYSQL最基本的分页方式:
复制代码 代码如下:
select * from content order by id desc limit 0, 10
在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就是确保使用了索引。随着数据量的增加,页数会越来越多,查看后几页的SQL就可能类似:
复制代码 代码如下:
select * from content order by id desc limit 10000, 10
一言以蔽之,就是越往后分页,LIMIT语句的偏移量就会越大,速度也会明显变慢。
此时,我们可以通过2种方式:
一,子查询的分页方式来提高分页效率,飘易用的SQL语句如下:
复制代码 代码如下:
SELECT * FROM `content` WHERE id (SELECT id FROM `content` ORDER BY id desc LIMIT ".($page-1)*$pagesize.", 1) ORDER BY id desc LIMIT $pagesize
为什么会这样呢?因为子查询是在索引上完成的,而普通的查询时在数据文件上完成的,通常来说,索引文件要比数据文件小得多,所以操作起来也会更有效率。(via)通过explain SQL语句发现:子查询使用了索引!
复制代码 代码如下:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY content range PRIMARY PRIMARY 4 NULL 6264 Using where
2 SUBQUERY content index NULL PRIMARY 4 NULL 27085 Using index
经过飘易的实测,使用子查询的分页方式的效率比纯LIMIT提高了14-20倍!
二,JOIN分页方式
复制代码 代码如下:
select * FROM `content` AS t1
JOIN (SELECT id FROM `content` ORDER BY id desc LIMIT ".($page-1)*$pagesize.", 1) AS t2
WHERE t1.id
经过我的测试,join分页和子查询分页的效率基本在一个等级上,消耗的时间也基本一致。explain SQL语句:
复制代码 代码如下:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY system NULL NULL NULL NULL 1
1 PRIMARY t1 range PRIMARY PRIMARY 4 NULL 6264 Using where
2 DERIVED content index NULL PRIMARY 4 NULL 27085 Using index
三,使用MYSQL的FOUND_ROWS()函数
Mysql FOUND_ROWS() 函数结合SQL_CALC_FOUND_ROWS在SELECT中可以得到两个结果:
1. 得到Limit的内容
2. 得到去除Limit以后所有行数
SELECT语句中经常可能用LIMIT限制返回行数。有时候可能想要知道如果没有LIMIT会返回多少行,但又不想再执行一次相同语句。那么,在SELECT查询中包含SQL_CALC_FOUND_ROWS选项,然后执行FOUND_ROWS()就可以了:
复制代码 代码如下:
select SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT FOUND_ROWS();
其中SQL_CALC_FOUND_ROWS 告诉Mysql将sql所处理的行数记录下来,FOUND_ROWS() 则取到了这个纪录。 虽然也是两个语句,但是只执行了一次主查询,所以效率比原来要高很多。
1. 如果在前一条语句中使用SQL_CALC_FOUND_ROWS选项,FOUND_ROWS()将返回第一条语句没有LIMIT时返回的行数。
2. 如果在前一条语句中没有使用SQL_CALC_FOUND_ROWS选项,FOUND_ROWS()将返回前一条语句实际返回的行数。
如果使用 SELECT SQL_CALC_FOUND_ROWS,MySQL必须计算所有结果集的行数。尽管这样,总比再执行一次不使用LIMIT的查询要快多了吧,因为那样结果集要返回客户端滴。(另外:应该不单是没有将结果集返回的原因,还有原因可能是比如LIKE之类比较费劲的SQL不需要再去劳累一次。)
复制代码 代码如下:
-- 注意下面语句中的条件 LIKE
SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE Name LIKE '%string%' id > 100 LIMIT 10;
SELECT FOUND_ROWS();
复制代码 代码如下:
-- 上面语句等价于下面语句,但性能方面应该提升非常非常的明显:
SELECT COUNT(*) FROM tbl_name WHERE Name LIKE '%string%' ;
SELECT * FROM tbl_name WHERE Name LIKE '%string%' id > 100 LIMIT 10;
相关推荐:
360优化关键词-提升网站流量与排名的秘密武器,美拍ai
seo配置是什么,seo设置是什么 ,ai图标制作教程
优化百:开启数字时代的智能营销新时代,湘潭seo优化报价表
WPJVX:开启数字化未来的智慧平台,关键词排名技术咨询乐云seo
不利于seo是什么,不属于seo对网店推广的作用 ,ai渐变下载
SEO师:如何在数字时代为企业赢得流量与销量,十堰网站关键词优化教程
SEO在广告领域的深度解析:如何利用SEO提升广告效果,网文写作ai工具
软件AI的全称:人工智能驱动未来的关键力量
为什么选择老域名注册,打造品牌价值的秘密武器,网站建设服务费用多少
SEO部:开启数字化营销新纪元的幕后英雄,株洲营销推广是什么公司
ChatGPT启动时遇到问题?快速解决方案让你畅享智能对话体验,ai如何保存logo
SEO外链建设:提升网站排名的关键策略,ai偏执
AI软件不用登录,让你的工作更高效轻松,智能ai写作改稿怎么改
seo,seoul city ,ai精洗
ChatGPT连了外网也登不了?如何解决这一问题,重新畅享AI助力!,ai少女大瓜
交友群都有哪些,交友群是干什么的 ,ai猫csgo
AI免费文章解读:智能写作新篇章,小店AI
SEO模块:提升网站排名,驾驭数字营销未来,营口网站建设制作平台
中外链:打通全球流量的桥梁,提升网站排名与流量的双重保障,行业网站建设思路
GoogleGTP-智能时代的革命性突破,人工智能的新纪元,ai可以降论文ai率吗
360AI写作怎样?助力创作的新风尚,ai到访
什么是seo发外链,seo外链类型有哪些 ,小小苏ai
如何利用AI生成高质量文章,提升写作效率与创意?
一秒采集:提升效率、创造价值的秘密武器,苏州网站整站优化
ChatGPT页面空白不乏登录:让你秒变职场高手与生活智囊,百度ai 腾讯ai
为什么做seo的人很少,为了什么做seo ,ai不负你
SEO快速提升:让你的网站排名瞬间飙升的秘诀,网站建设的发展目标
SEO收费如何选择合适的SEO服务,提升网站排名并增加曝光度,做网站优化哪家实惠
ChatGPT手机下载后打不开?可能是这些问题导致的,解决方法在这里!,孤城ai动画
URL站长的崛起:打造高效网站运营的秘密武器,网站建设费用计算依据
好用的人工智能AI软件推荐,让你的生活更智能!
OpenAI新产品与现有技术的完美结合:赋能未来的智能变革,培训 ai
“赞片CMS”-让你的*站点管理更高效、便捷,日照seo平台
什么是seo模型,seo模块总结 ,ai技术授课
SEO快速优化排名:助你网站跃升搜索引擎首页,ai彩虹立体9怎么做
SEO优化需要花钱吗?从零起步,如何让SEO成为企业的“隐形财富”,字体如何往ai里面倒
ChatGPT页面不自动显示最新消息:如何解决这一困扰,提升使用体验?,斑马ai幼儿百度云网盘
“曝光量扩大,助力品牌腾飞的秘密武器”,盐山网站优化免费咨询
优化服务网-提升客户体验,打造全方位智慧服务平台,东莞网站建设员招聘信息
为什么“360收录”是你网站推广的必备利器,seo亚马逊
ChatGPT对于大数据发展的帮助:赋能行业变革,推动智能化未来,ai写作真的好吗
文字生成AI:开启创意写作的新纪元
AI代谢文章:从灵感到成果的创作革命
智能AI写文章:高效创作新风尚
SEO无限:如何利用SEO技术实现网站流量爆发?,网站建设总监
SEO地址优化的秘诀:提升网站排名与流量的关键,临沂如何优化网站关键词
SEO发明:引领数字时代营销革命的力量,速卖通外贸推广网站
OpenAI账号申诉怎么办?全方位解析解决方案,ai写作免费公众号下载
seo软件是什么职位,seo用的是什么软件 ,ai感知树
seo需要什么器械,seo需要什么器械才能做 ,长续航ai纯电汽车