分页及子查询

Sharding-JDBC完全支持MySQL、PostgreSQL和Oracle的分页查询,SQLServer由于分页查询较为复杂,仅部分支持。

分页性能

性能瓶颈

查询偏移量过大的分页会导致数据库获取数据性能低下,以MySQL为例:

SELECT * FROM t_order ORDER BY id LIMIT 1000000, 10

这句SQL会使得MySQL在无法利用索引的情况下跳过1000000条记录后,再获取10条记录,其性能可想而知。而在分库分表的情况下(假设分为2个库),为了保证数据的正确性,SQL会改写为:

SELECT * FROM t_order ORDER BY id LIMIT 0, 1000010

即将偏移量前的记录全部取出,并仅获取排序后的最后10条记录。这会在数据库本身就执行很慢的情况下,进一步加剧性能瓶颈。因为原SQL仅需要传输10条记录至客户端,而改写之后的SQL则会传输1000010*2的记录至客户端。

Sharding-JDBC的优化

Sharding-JDBC进行了2个方面的优化。

首先,Sharding-JDBC采用流式处理 + 归并排序的方式来避免内存的过量占用。Sharding-JDBC的SQL改写,不可避免的占用了额外的带宽,但并不会导致内存暴涨。

与直觉不同,大多数人认为Sharding-JDBC会将1000010*2记录全部加载至内存,进而占用大量内存而导致内存溢出。

但由于每个结果集的记录是有序的,因此Sharding-JDBC每次比较仅获取各个分片的当前结果集记录,驻留在内存中的记录仅为当前路由到的分片的结果集的当前游标指向而已。

sharding子查询_分页及子查询相关推荐

  1. case when 子查询_标准SQL——子查询、分组查询、多表联查

    点击上方蓝色字关注我们!❈ 一.查询子句: 1.排序子句:order by 列,列.. [asc|desc]  排序, select * from user order by account desc ...

  2. order by 子查询_视图,子查询,标量子查询,关联子查询

    视图 子查询 标量子查询 关联子查询 如何用SQL解决业务问题 各种函数 1. 视图 视图内存放SQL查询语句,运行时运行该语句.查出的数据为临时数据 创建视图 create view as 视图名称 ...

  3. python分页查询_分页查询

    分页 使用SELECT查询时,如果结果集数据量很大,比如几万行数据,放在一个页面显示的话数据量太大,不如分页显示,每次显示100条. 要实现分页功能,实际上就是从结果集中显示第1~100条记录作为第1 ...

  4. 使用python对学生表的查询_多表组合查询——Python操作Mysql数据库

    前面我们介绍了单张表的查询,包括模糊查询.分组.排序.各种筛选条件等等操作,在实际应用中,查询的数据往往不止局限在一张表里,通常需要多张表在一起进行组合查询,今天我们将会对Mysql当中的多张有关联的 ...

  5. 外键查询_传统关系型数据库查询性能提高思路

    相信现阶段依然有许多的企业信息化项目依然采用单体架构,其数据存储主要方式依然以关系型数据库为主,比如oracle.mysql.postgresql等.企业初期,各种原因导致研发人员身兼数职,都是全栈的 ...

  6. .net函数查询_数据分析-SQL-复杂查询

    内容简介: 视图 子查询 标量子查询 关联子查询 各种函数 练习题 总结 一.视图 1.1 视图是什么? 数据库里面有很多表,表里放的是实际数据,视图中存放的是SQL查询语句,当我们用客户端(例如na ...

  7. mysql连接与嵌套查询_数据库之嵌套查询与连接查询

    嵌套查询 单值嵌套查询 值返回结果是一个值的嵌套查询称为单值嵌套查询 对Sales数据库,列出市场部的所有员工的编号 USE Sale GO SELECT employee_id FROM emplo ...

  8. 条件查询_多条件组合查询---测试用例设计

    一.假设查询因子:A,B,C,D,E(下拉框+复选框) 1.单独查询:A:B:C:D:E - 确保单独查询的正确性,这也是最基本的. 2.两个组合查询:AB:AC:AD:AE:BC:BD:BE:CD: ...

  9. django ajax 查询,Django分页和Ajax查询

    在Django中,实现分页以在多个页面上显示查询项目是非常简单的.使用Ajax仅更新实际发生更改的页面位,而不是每次加载整个页面也是非常直接的.但是,当我们将两者结合在一起时,我发现它有点问题.Dja ...

最新文章

  1. ios开发之UIView和UIViewController
  2. XML Json
  3. java resp req_java request和response区别
  4. 基于Spring boot+Vue的在线考试系统
  5. verilog实现汉明权重_(学习Verilog)6. FIR IP核的基础功能使用总结
  6. 利用memoize缓存到Redis出现多个参数同一个结果
  7. 动态执行javascript代码
  8. 王道数据结构代码笔记
  9. autocad2014点击保存闪退_autocad2014启动闪退 AutoCAD启动时闪退怎么办
  10. miR数据分析处理流程
  11. 自然语言处理 情绪识别
  12. 人民大学与加拿大女王大学金融硕士——你终究会成为你想成为的人
  13. 设置网页头部图标icon
  14. Cannot Resolve method subscribe(anonymous org.reactivestreams.Subscriber 已解决
  15. 第六章 电磁新理论(修补章)
  16. comma是什么键(trailing comma是什么意思)
  17. NOI / 1.10编程基础之简单排序 02:奇数单增序列
  18. Java智能五子棋(更新中)
  19. 网吧会员计费管理系统-javaweb
  20. 如何用PHP-Eclipse调试PHP程序

热门文章

  1. SQL语句修改表操作
  2. 直接上干货!春招我借这份PDF的复习思路,大厂直通车!
  3. 网络安全学习笔记——域名伪装与URL跳转漏洞
  4. 2021年全球池塘衬垫收入大约1560.9百万美元,预计2028年达到2411.2百万美元
  5. word文档:如何去除复制网页文本的背景颜色
  6. 用友3.0的企业互联网服务 软件、云服务、金融成“三驾马车”
  7. csol永恒python宏_【午时已到】【永恒】Python图文评测
  8. Stable Diffusion XL:更快,更强
  9. TensorFlow(keras)入门课程--03 卷积介绍
  10. python遍历数组获取下标_如何在循环中获取索引(数组下标)