位置: 编程技术 - 正文

mysql分页性能探索(mysql分页效率)

编辑:rootadmin

推荐整理分享mysql分页性能探索(mysql分页效率),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql分页显示,mysql分页实现原理,mysql分页实现原理,mysql 分页越来越慢的原理,mysql分页查询慢,mysql分页性能优化,mysql分页性能优化,mysql分页性能问题,内容如对您有帮助,希望把文章链接给更多的朋友!

常见的几种分页方式:

1.扶梯方式

扶梯方式在导航上通常只提供上一页/下一页这两种模式,部分产品甚至不提供上一页功能,只提供一种“更多/more”的方式,也有下拉自动加载更多的方式,在技术上都可以归纳成扶梯方式。扶梯方式在技术实现上比较简单及高效,根据当前页最后一条的偏移往后获取一页即可。写成SQL可能类似

1.电梯方式

另外一种数据获取方式在产品上体现成精确的翻页方式,如1,2,3……n,同时在导航上也可以由用户输入直达n页。国内大部分场景采用电梯方式,但电梯方式在技术实现上相对成本较高。

在MySQL中,通常提到的b-tree,在存储引擎实现上,通常都是b+tree。

使用电梯方式时候,当用户指定翻到第n页时候,并没有直接方法寻址到该位置,而是需要从第一楼逐个count,scan到count*page时候,获取数据才真正开始,所以导致效率不高。

传统分页技术(电梯方式)

首先前端需要传给你的分页实体,以及查询条件

然后你需要返回查询总条数给前端;

然后再返回指定页面条数给前端:

由上面两条sql语句查询出来的结果需要返回给前端的分页实体,以及单页结果集

传统查询方法,每次请求变化的只有pageIndex值,也就是limit offset,num的offset

如limit 0,; limit ,; …. limit,;

上面的变化会导致每次查询所执行的时间会有偏差,offset值越大需要的时间越长,如limit, 需要读取个数据才能得到想要的条数据。

优化方法

传统方法中我们了解到,影响效率的关键是程序遍历了许多不需要的数据,找到了关键点那么就从这里着手。

mysql分页性能探索(mysql分页效率)

如果没有必须使用电梯方式的时候,我们可以使用扶梯的方式,来提高性能。

但是大多数情况,电梯形式更能满足用户的需求,所以我们就需要另找方法来优化电梯形式。

基于传统方式的优化

上面提到的优化方式,要么难以满足用户的需求,要么实现起来过于复杂,所以如果数据量不是特别大的时候,像百来万条数据,其实根本没有必要使用上面的优化方法。

传统方法已经足够用了,只不过传统方法也可能需要优化的地方。例如:

orderby优化

这条语句中使用了ORDERBY关键字,那么对什么进行排序又非常重要了,如果你是对自增id进行排序的话,那么这条语句就不需要优化了,如果是索引甚至非索引的话,那就需要优化了。

首先你要保证它是索引,不然真的会很慢。然后如果他是索引,但是本身不像自增id那样有序的话,那么就要改写成下面的语句。

下面是对两条sql的 EXPLAIN

由图中我们可以看出,第二个sql可以少扫面很多页面。

其实这涉及到order by的优化问题,第一条sql中并没有利用到subject_code索引。如果你改为select subject_code …则用到了索引。下面是对order by的优化。

order by后的字段,如果要走索引,须与where 条件里的某字段建立复合索引!!或者说orcerby后的字段如果要走索引排序,它要么与where条件里的字段建立复合索引【这里建立复合索引的时候,需要注意复合索引的列顺序为(where字段,order by字段),这样才能满足最左列原则,原因可能是order by字段并能算在where 查询条件中!】,要么它自身要在where条件里被引用到!

表asubject_code为普通字段,上面建有索引,id是自增主键

意思是说order by 要避免使用文件系统排序,要么把order by的字段出现在select后,要么使用order by字段出现在where 条件里,要么把order by字段与where条件字段建立复合索引!

第二条sql就是巧妙的利用第二种方式利用上了索引。 select id from a order bysubject_code,这种方式

count优化

当数据量非常大时,其实可以输出总数的大概数据,利用explain语句,他并没有真正去执行sql,而是进行的估算。

总结

以上所述是小编给大家介绍的mysql分页性能探索,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对积木网网站的支持!

winx下mysql5.7.的基本安装流程(详细) 1·下载

MySQL 语句注释方式简介 MySQL支持三种注释方式:1.从‘#'字符从行尾。2.从‘--'序列到行尾。请注意‘--'(双破折号)注释风格要求第2个破折号后面至少跟一个空格符(例如空格、ta

MySQL优化总结-查询总条数 1、COUNT(*)和COUNT(COL)COUNT(*)通常是对主键进行索引扫描,而COUNT(COL)就不一定了,另外前者是统计表中的所有符合的纪录总数,而后者是计算表中所有符合

标签: mysql分页效率

本文链接地址:https://www.jiuchutong.com/biancheng/348291.html 转载请保留说明!

上一篇:MySQL5.7.17安装及配置图文教程(mysql5.7.21安装教程)

下一篇:winx64下mysql5.7.19的基本安装流程(详细)

  • 预缴增值税的销售额怎么填
  • 私车公用去税务局开什么发票
  • 红字专票进项税额如何做
  • 固定资产本期发生额怎么算
  • 其他应收款要做账吗
  • 基本医疗保险基金与生育保险基金
  • 应付账款少记违反什么认定
  • 应收账款换入固定资产双方账务处理
  • 公司清算往来科目应该怎么处理?
  • 公司股权平价转让要交税吗
  • 资产减值损失和信用损失的区别
  • 哪些税不适用征管法
  • 价内税和价外税名词解释
  • 农产品初加工免征企业所得税
  • 财务会计中的费用
  • 工会经费漏申报去大厅怎么处理
  • 增长率应该要如何计算呢?
  • 资产减值损失月末需要结转吗
  • 开户许可证复印件是什么
  • 企业享受小型微利政策
  • 费用应计入管理费用的有
  • 个人取得的哪些收入属于经营所得
  • 进项转出税务处理
  • 更改代理设置失败 可能无网络连接
  • linux虚拟机在哪里输入命令
  • 从税法角度看,商誉计税基础
  • 以固定资产对外投资交税吗
  • 单位撤销现金余额的规定
  • 进项发票认证后多久可以申报
  • 路由器怎么设置2.4g网络
  • PHP:mcrypt_decrypt()的用法_Mcrypt函数
  • 收到工程款怎么做账务处理
  • Chat GPT实用案例——VUE+Chat GPT实现聊天功能教程
  • php use function
  • laravel phpstudy
  • 增值税专用发票查询系统官方网站
  • vue在项目中怎么用的
  • 出口退税款的账务怎么做
  • axios和ajax的关系
  • split 文件分割
  • php微信公众号开发反回图片怎么弄的学校
  • 印花税跨年度缴纳有滞纳金吗
  • 增值税预征税率是多少
  • 网站用masonry瀑布流无限加载重叠解决方法
  • mysql中join的用法
  • 沙子产量表格
  • 应付职工薪酬中的职工是指
  • 其他权益工具投资公允价值变动怎么计算
  • 付的房屋租金计入什么会计科目
  • 企业哪些进项税抵扣
  • 本月销售商品会计分录
  • 文化事业建设费的征收标准
  • 税务上减免两费是什么
  • 补发工资怎么补发
  • 现金日记账年结怎么做
  • 利息收入记借方还是贷方
  • mac下安装anaconda
  • win10一天更新几次
  • 电脑xp系统的设置在哪
  • Linux系统网络配置
  • 如何安装win7系统教程
  • wind启动项
  • 关闭5gwifi
  • 解决在ios8中, cocos2dx 2.x版本里CCClippingNode没有效果的问题
  • js中事件的三要素
  • webpack使用ejs
  • 杨辉三角的代码
  • unity创建射线
  • linux中sudo命令的使用方式和作用
  • unity技术分享
  • javascript例题
  • node解决了什么问题
  • 第二章,动态添加按钮(Android)
  • 国家税务总局公告2022年第9号
  • 重庆网上申报税务操作流程
  • 陕西省国家励志奖学金证书查询入口
  • 贵州省地方税务局历任纪检组长马平
  • 车辆购置税已缴款未入库可以上牌吗
  • 党建 共享
  • 重庆职高学校推荐
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设