当前位置: 首页 > news >正文

广西今日头条崇左最新消息杭州百度快照优化排名推广

广西今日头条崇左最新消息,杭州百度快照优化排名推广,做的好的茶叶网站,采购管理系统的功能有哪些问题描述 mysql中,使用limitoffset实现分页难免会遇到深度分页问题,即页码数越大,性能越差。 select * from student order by id limit 200000,10;如上语句,其实我们希望查询第20000页的10条数据,实际执行会发现耗时…

问题描述

mysql中,使用limit+offset实现分页难免会遇到深度分页问题,即页码数越大,性能越差。

select * from student order by id limit 200000,10;

如上语句,其实我们希望查询第20000页的10条数据,实际执行会发现耗时比获取第1页的10条慢很多。

原因分析

参考https://blog.csdn.net/cschmin/article/details/123148092解释的limit+offset实现原理,便可知道,mysql引擎层其实是把offset+limit条记录,全部返回给server层了,server层再过滤掉前offset条记录,把最后10条记录返回给客户端。显而易见,由于引擎层的“懒惰”,给server层造成了巨大的压力,以及数据传输带来的资源消耗。

优化方法

(1)子查询优化

select * 
from student t1, (select id from student order by id limit 200000,10) t2 
where t1.id=t2.id;

网上挺多文章说这种优化是借助了select只选择id一个列,符合了覆盖索引规则,所以快速跳过了前200000条记录,亦或是说避免了回表操作,两种说法都是扯蛋。这个子查询优化的本质是大大减少了引擎层返回给server的数据量而已。假如student表的列很少且很小,例如只有id、name两个字段,你再试试这个优化,基本没有效果。所以这个子查询优化的应用场景是表的行很大时,可以优化引擎层返给server层的数据量,数据条数并没有减少。而且由于子查询的存在,引擎层和server层的交互多了一次(第一次是子查询返回给server层200010个id,第二次返回给server层10条完整记录)。

(2)不使用limit+offset

改用标记法来实现分页,这也是企业级业务上比较常用的方法。标记法每次查询都携带着起始条件:

select * from student where id>200000 limit 10;

其中200000就是调用者当前页的起始位置。

优点:

  • 直接规避了深度分页问题

缺点:

  • 需要调用者自己维护标记(例如当前页起始于20,结束于29,那么调用者要自己算出下一页起始是30);
  • 不太容易通过页码直接跳转了(例如从第3页跳到第20000页);

(3)使用ElasticSearch

考虑将mysql数据同步到ES,然后借助ES来实现分页查询。不过,ES也会遇到深度分页的问题 ,只是没有mysql来的那么早而已。 例如我司在做某个文件管理库时,由于文件太多了,即便做了分表,数据量依然很大,查询负担太大,于是上层通过ES用于一些查询。

案例测试

---------------------------------------------------------------
-- 创建一个测试表
---------------------------------------------------------------
CREATE TABLE `student` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(40) COLLATE utf8mb4_bin DEFAULT NULL,`age` int DEFAULT NULL,`feild_1` char(255) COLLATE utf8mb4_bin DEFAULT NULL,`feild_2` char(255) COLLATE utf8mb4_bin DEFAULT NULL,`feild_3` char(255) COLLATE utf8mb4_bin DEFAULT NULL,`feild_4` char(255) COLLATE utf8mb4_bin DEFAULT NULL,`feild_5` char(255) COLLATE utf8mb4_bin DEFAULT NULL,`feild_6` char(255) COLLATE utf8mb4_bin DEFAULT NULL,`feild_7` char(255) COLLATE utf8mb4_bin DEFAULT NULL,`feild_8` char(255) COLLATE utf8mb4_bin DEFAULT NULL,`feild_9` char(255) COLLATE utf8mb4_bin DEFAULT NULL,`feild_10` char(255) COLLATE utf8mb4_bin DEFAULT NULL,`feild_11` char(255) COLLATE utf8mb4_bin DEFAULT NULL,`feild_12` char(255) COLLATE utf8mb4_bin DEFAULT NULL,`feild_13` char(255) COLLATE utf8mb4_bin DEFAULT NULL,`feild_14` char(255) COLLATE utf8mb4_bin DEFAULT NULL,`feild_15` char(255) COLLATE utf8mb4_bin DEFAULT NULL,`feild_16` char(255) COLLATE utf8mb4_bin DEFAULT NULL,`feild_17` char(255) COLLATE utf8mb4_bin DEFAULT NULL,`feild_18` char(255) COLLATE utf8mb4_bin DEFAULT NULL,`feild_19` char(255) COLLATE utf8mb4_bin DEFAULT NULL,`feild_20` char(255) COLLATE utf8mb4_bin DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE,KEY `idx_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=208505 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;---------------------------------------------------------------
-- 随机生成20万记录
---------------------------------------------------------------
DELIMITER //
CREATE PROCEDURE insert_student(IN n INT)
BEGINDECLARE i INT DEFAULT 0;WHILE i < n DOINSERT INTO student (age, name) VALUES (FLOOR(RAND() * 100), LEFT(UUID(), 8));SET i = i + 1;END WHILE;
END //
DELIMITER ;CALL insert_student(200000);select count(*) from student;---------------------------------------------------------------
-- 深度分页耗时测试
---------------------------------------------------------------
select * from student limit 200000,10;  -- 977msselect id,feild_1,feild_2,feild_3,feild_4,feild_5,feild_6,feild_7,feild_8,feild_9 from student order by id limit 200000,10  -- 475msselect id,feild_1 from student order by id limit 200000,10  -- 138msselect id from student limit 200000,10;  -- 65msselect * 
from student t1, (select id,feild_1,feild_2,feild_3,feild_4,feild_5,feild_6,feild_7,feild_8,feild_9 from student order by id limit 200000,10) t2 
where t1.id=t2.id;    -- 443msselect * 
from student t1, (select id from student order by id limit 200000,10) t2 
where t1.id=t2.id;  -- 60ms
http://www.15wanjia.com/news/11167.html

相关文章:

  • 源码WordPressseo排名赚app下载
  • 如何为公司做网站百度app下载安装
  • 电影项目做产品众筹哪个网站好百度应用商店下载安装
  • 杭州企业网站建设方案2024很有可能再次封城吗
  • 视频直播网站如何做唐山seo排名优化
  • 做政府网站个人能做吗seosem是指什么意思
  • 国内网站设计案例欣赏yandx引擎入口
  • 品牌建设的步骤提供seo顾问服务适合的对象是
  • 六安网站制作公司排名线上宣传推广方案
  • 网站采集怎么做公司网站设计要多少钱
  • 惠州seo百度网站排名优化价格
  • 上海企业注销一窗通抖音seo源码搭建
  • 深圳市昊客网络科技有限公司做网络优化的公司排名
  • 代做淘宝网站企业营销策划书如何编写
  • 人民法院公告网查询什么是优化师
  • 网页制作教程视频教学班级优化大师app
  • 网站建设申请理由100个裂变营销案例
  • 无锡哪家公司做网站百度竞价代理商
  • 网站建网站建设seo帮帮您百度怎么收录自己的网站
  • 简单医院网站千锋教育的口碑怎么样
  • 武汉微网站网站推广的主要方式
  • 扫描到网站目录然后怎么做活动策划方案详细模板
  • 做那事的网站搜索引擎快速排名推广
  • 济南微网站建设网络的推广方式有哪些
  • 恩施seo网站优化关键词价格
  • 网站里怎么做301指向营销策划品牌策划
  • 口碑好的大良网站建设时事新闻最新2022
  • 太原网站建设 世纪优创短视频新媒体推广
  • 短链接生成源码内部搜索引擎优化
  • 个人做的微网站一年要交多少钱近三天重大新闻摘抄