在公司干活一般使用sqlserver数据库。rownumber分页贼好用。

但是晚上下班搞自己的事情就不用sqlserver了。原因就是自己的渣渣1核2g的小服务器完全扛不住sqlserver那么大的大块头,于是就使用Mysql数据库。

一般使用MySQL分页都是使用limit,我也这么使用的。

今天晚上打开一个服务器上的小网站,顺便点几下看看有没有问题,不小心点到了最后一页,卡了我近10秒才反应过来。我数据库就7w多条数据。虽说服务器垃圾也不至于卡这么久吧。。

然后把分页的sql找出来,去数据库手动执行。发现确实越往后翻页越慢,翻到四万多条的时候,都好几秒才响应了。这完全无法接受啊。难怪最近网站的搜索引擎权重又降低了。。5555

分页sql如下

select id ,title,time from table where type = ‘xxx’ ORDER BY createtime limit 10 offset 45000

因为Id是主键,我尝试去掉了title和time字段,马上就秒开了。

查看数据库执行计划,索引是已经命中了。但是为什么还是很卡呢?

查阅了不少资料,得出两个结论

1.服务器实在是太垃圾了。

2.limit x offset x 分页确实有性能问题,据说阿里的dba都不太建议offset太多。。。

解决方案:

既然都无法使用offset,那就曲线救国。

既然Id很快,那就先按照Id排序做分页,查询出一页的Id,然后join当前表 id和Id关联。

SELECT q.id, p.title, p.createtime from(
SELECT id from tablewhere type = @type ORDER BY createtime limit @size OFFSET @offset
) q JOIN tablep on q.id = p.id

然后使用新的这条sql,去数据库查询,直接就从10秒+降到了0.02秒的样子。

并且继续往后翻页也不会有什么太大的性能问题。就先凑合到这里了。

好怀念工地的服务器。上百G的内存随便挥霍。几百万上千万的量都不咋优化,都跑的飞快。sqlserver收费也不是没有道理的。不用做太多的配置。

自己干活就只能用小水管服务器。死扣细节做优化。

最新文章

  1. push or get File or Folder using scp wrapped with expect and bash
  2. 使用Asp.Net Core Identity给用户添加及删除角色
  3. Rhino 是一个完全使用Java语言编写的开源JavaScript实现。Rhino通常用于在Java程序中,为最终用户提供脚本化能力。它被作为J2SE 6上的默认Java脚本化引擎。
  4. ref 关键字修饰引用类型
  5. HTML页面上获取鼠标的位置(备忘)
  6. 科学家有了钱以后,真是挺吓人的——D.E.Shaw的牛逼人生
  7. JavaScript+DOM编程艺术【读书笔记】
  8. union与union all 的区别
  9. Spark Accumulators
  10. [HCNA]VLAN配置Trunk接口
  11. flask记录
  12. loadrunner / socket level data and wininet level data
  13. HUAWEI USG6000系列 & NGFW Module V100R001 典型配置案例
  14. java中常用的包及作用
  15. Nuxt.js项目实战
  16. Runtime单例模式类 -- 控制电脑关机
  17. AJAX删除事件与加载数据
  18. Basic Authentication in ASP.NET Web API
  19. Union Find - 20181102 - 20181105
  20. Vbs 测试程序三

热门文章

  1. 使用图灵机器人api搭建微信聊天机器人php实现
  2. PHP如何解决表单重复提交
  3. Go语言标准库之flag
  4. jumper-server-第一次粗略配置
  5. 原创 | 手摸手带您学会 Elasticsearch 单机、集群、插件安装(图文教程)
  6. 微软发布.Net Core 3.0 RC1,最终版本定于9月23日
  7. java架构之路-(源码)mybatis执行流程源码解析
  8. charles 禁用缓存
  9. (5)Makefile详解
  10. BOM之定时器