分库分表全局查询

简介: 【7月更文挑战第12天】

当面试官追问你其中细节的时候,你就可以这样来引导。

理论上说,分页查询要在全局有序的情况下进行,但是在分库分表以后,要做到全局有序就很难了。假如说我们的数据库order_tab是以buyer_id % 2来进行分表的,如果你要执行一个语句

SELECT * FROM order_tab ORDER BY id LIMIT 4 OFFSET 2

实际执行查询的时候,就要考虑各种数据的分布情况。

  • 符合条件的数据全部在某个表里面。在这就是order_tab_0上有全部数据,或是order_tab_1上有全部数据。

  • 偏移量中前面两条全部在一张表,但是符合条件的数据在另外一张表

  • 偏移量和数据在两张表都有

在分库分表中,一个SELECT语句生成的目标语句是这样的:

SELECT * FROM order_tab ORDER BY id LIMIT 6 OFFSET 0
SELECT * FROM order_tab ORDER BY id LIMIT 6 OFFSET 0

注意看LIMIT部分,被修改成了0,6。通俗的说,如果一个分页语句是 LIMIT x OFFSET y 的形式,那么最终生成的目标语句就是 LIMIT x + y OFFSET 0。

LIMIT x OFFSET y => LIMIT x+y OFFSET 0

当分库分表中间件拿到这两个语句的查询结果之后,就要在内存里进行排序,再找出全局的LIMIT 4 OFFSET 2
可以先回答这种全局排序的思路,关键词就是LIMIT x + y OFFSET 0

目录
相关文章
|
6月前
|
缓存 关系型数据库 MySQL
分库分表知识总结(四)
分库分表知识总结(四)
76 1
|
6月前
|
SQL 存储 数据库连接
什么是分库分表,为什么要分库分表?
笔者经常将缓存、分库分表、消息队列定义为高并发三剑客。开发互联网应用系统时,分库分表是一个绕不开的技术点。 这篇文章,我们会探讨如下问题:
|
2月前
|
SQL Oracle 关系型数据库
分库分表
分库分表
|
6月前
|
存储 关系型数据库 中间件
什么是分库分表
什么是分库分表
79 3
|
1月前
|
存储 Java 关系型数据库
分库分表专题
分库分表专题
|
6月前
|
存储 算法 数据库连接
为什么要分库分表
为什么要分库分表
为什么要分库分表
|
6月前
|
缓存 监控 Java
分库分表带来的问题
分库分表带来的问题
|
SQL 缓存 关系型数据库
什么情况下需要考虑分库分表?
什么情况下需要考虑分库分表?
153 0
|
存储 负载均衡 Oracle
分库分表介绍
分库分表是一种用于解决大规模数据存储和查询性能问题的数据库架构设计技术。它将一个数据库拆分成多个独立的数据库实例(分库),并将每个数据库实例的表进一步拆分成多个子表(分表)。这样可以提高数据库的并发处理能力和查询性能。
249 0
|
存储 SQL 关系型数据库
分库分表是什么
分库分表是什么
116 0
分库分表是什么