之前讲了利用sharding-jdbc 3.1进行分表的情况,也讲了利用一致性hash去做分表的高可用。今天讲下分表后的分页,排序,条件查询优化。

其实本身sharding-jdbc是提供了分页功能的,我们方便期间是可以直接用的,但是不推荐用它。亲测翻页深度越深性能消耗越大,慢到让你抓狂。

简单介绍下他的分页原理,不做太多讲解:

分页和排序都用到了结果归并器:

排序

举例 我们的sql是 select * from user u order u.id desc;

然后被sql路由改写成如下sql:

select * from user_0 u order u.id desc;

select * from user_1 u order u.id desc;

查询出结果后然后各自存入队列,然后两个队列再进行比较,再排序。这种方式类似流的方式比较,性能上它已经做了最大的优化,时间复杂度是O(n) ,可想而知如果有100W数据,需要处理多久这个大家自己猜吧 哈哈。

分页

我们先理解 select u.* from user u limit100000,10 MySQL本身的查询器是先跳过前100000数据,然后再取10条数,其实本身性能就开始下降了。

然后经过sharding-jdbc的sql路由改写成如下sql:

select * from user_0 u limit 0,100010;

select * from user_1 u limit 0,100010;

然后查出结果再在归并器里处理,这样的性能很难让人接受。

条件查询:

直接就实现不了,是不是欲哭无泪?

解决办法:

解决办法一般都放弃使用它自身的这种排序或者分页,使用nosql工具如 MongoDB,es,solr等创建二级索引。

比如我们利用es,把我们常用的搜索条件和排序字段都索引进去,这样我们先查询es,然后返回id(分表策略选取的id),然后再拿这个id去各个表中查询,性能也完全没有问题。如果该id在各个表中刚好是主键,那性能会非常快,因为主键不但是唯一索引,更因为是聚簇索引,聚簇索引上面存的是该列数据。

关于MongoDB,es的使用和优化后面会讲到,MySQL的索引优化及索引使用也会讲到

如果觉着写的不好请多指教,也可以给我留言。如果觉着对你有帮助也请持续关注哈。

也可以动下你的小手指分享一下呀

面试过关斩将:分库分表终极问题解答-高可用方案:一致性hash

面试过关斩将:分库分表终极问题解答-拆表方案sharding-jdbc

mysql 分表 条件查询,面试过关斩将:分库分表-sharding-jdbc分页,排序,条件查询优化...相关推荐

  1. mysql分表后怎么索引_分库分表后的索引问题

    摘要 最近遇到一个慢sql,在排查过程中发现和分库分表后的索引设置有关系,总结了下问题. 问题 在进行应用健康度盘点时,发现有个慢sql 如下 select brandgoodid from bran ...

  2. mysql 横向分表合并_MySQL横向扩展-分库分表解决方案总结

    从业务场景看分库分表 互联网行业中,业务场景通常写少读多的情况居多,在MySQL的使用前期,读性能大多可以通过SQL优化来解决,但随着业务的持续发展,单纯依靠SQL的查询优化会越来越难以达到业务服务要 ...

  3. MySQL分库分表会带来哪些问题?分库分表问题

    MySQL分库分表会带来哪些问题? 分库分表能有效的环节单机和单库带来的性能瓶颈和压力,突破网络IO.硬件资源.连接数的瓶颈,同时也带来了一些问题.下面将描述这些技术挑战以及对应的解决思路. 分库分表 ...

  4. mysql查询结果更新到新表_MySQL查询结果复制到新表的方法(更新、插入)

    MySQL中可以将查询结果复制到另外的一张表中,复制的话通常有两种情况,一种是更新已有的数据,另一种是插入一条新记录.下面通过例子来说明.首先构建两个测试表. 表t1: 表t2: 1.如果t2表中存在 ...

  5. python使用pandas基于时间条件查询多个oracle数据表

    python使用pandas基于时间条件查询多个oracle数据表 目录 python使用pandas基于时间条件查询多个orcale数据表 #orcale数据连接

  6. oracle表连接查询逗号隔开_Oracle多表连接查询

    连接:将一张表中的行按照某种条件和另一张表中的行连接起来形成一个新行的的过程. 根据连接查询返回的结果,分为3类: 内连接(inner join) 外连接(outer join) 交叉连接(cross ...

  7. mysql 表与表之间的条件比对_Mysql分库分表面试题(mysql高可用方案解析)

    数据库数据过大的系统架构-mysql分库分表高可用 如果当你的数据量达到千万级,亿级的时候,我们用常规的方式去做优化那么效果可能就不是很好了.这已经不是说性能的问题了,而是数据量响应的处理问题了,所以 ...

  8. 数据库查询某一列大写转化小写字母表示_基于MySQL数据库下亿级数据的分库分表...

    每天给你诚意满满的干货 本文来自程序之心知乎专栏收到的投稿 作者:恒生研究院 移动互联网时代,海量的用户数据每天都在产生,基于用户使用数据等这样的分析,都需要依靠数据统计和分析,当数据量小时,数据库方 ...

  9. mysql分库分表分页查询语句_MySQL分库分表分库后的查询(8th)

    前言 这边我们以使用python程序要展示一下再分库分表后,我们需要如何对数据库进行操作. python操作数据库 我们这边还是沿用之前的那5中:场景1:购买者下订单#!/usr/bin/env py ...

最新文章

  1. 博为峰JavaEE技术文章 ——MyBatis 注解
  2. 对于HTML表单输入字段,disabled =“ disabled”和readonly =“ readonly”有什么区别?
  3. python和mt4的区别_MT4和MT5有什么区别?
  4. swift string转int_swift中结构体和类的区别(值类型和引用类型的区别)
  5. 关于工业级RS485串口服务器的组网方式详解
  6. 深度学习目标检测算法综述(论文和代码)
  7. logstash-filter模块
  8. .net框架读书笔记---CLR内存管理\垃圾收集(二)
  9. 查询oracle数据库的表格数据类型,excel表格中如何查询数据库数据类型-我想把excel表格中的数据导入oracle数据库中,想在......
  10. 谈谈Python和其他语言的区别
  11. VC6.0创建文件夹
  12. 50兆 svg 文件超过_如何让 Flutter 应用更好地使用 SVG?
  13. apiDoc之api接口文档生成
  14. dependencyManagement 失效
  15. R语言数据分析案例合集
  16. AI机器人AI源码营销机器人电销机器人智能电话机器人拨号机器人语音机器人空号识别FreeSWITCH呼叫中心中间ipbxIPBX科大识别阿里识别语音识别语音翻译
  17. 不规则图形数格子的方法_最强大脑第四季不规则数独规则介绍 数独技巧口诀带图解析...
  18. typora导出pdf文件缺失
  19. string.Format字符串格式说明
  20. 梦三花重金修改服务器,3月6日一梦江湖游戏更新公告

热门文章

  1. 计算机及网络是把双刃剑,网络是一把双刃剑发言稿
  2. Netty高性能编程备忘录(上)
  3. 企业微信JS-SDK
  4. 我指间的刺青是对你的誓言
  5. 2050年人类将“永生”?或是人工智能下的必然
  6. Unity Metaverse(三)、Protobuf Socket 实现多人在线
  7. gzip解析 python
  8. css3 animation动画360旋转。旋转效果用transform:rotate过渡。
  9. Problem 2261 浪里个浪(多起点与多终点问题)
  10. 小程序云开发入门——问卷测评小程序实战(5)