文档备案控制台
免费开始使用

DRDS分库分表学习-如何高效扫描 DRDS 数据

DRDS 支持高效的数据扫描方式,并支持在全表扫描时使用聚合函数进行统计汇总。

常见的扫描场景如下:

  • 没有分库分表:DRDS 会把原 SQL 传递到后端 MySQL 执行。这种情况下 DRDS 支持任何聚合函数。

  • 非全表扫描:SQL 经过 DRDS 路由后,发送到单个 MySQL 库上执行。比如说拆分键在 WHERE 中是等于关系时,就会出现非全表扫描。此时同样可以支持任何聚合函数。

  • 全表扫描:目前支持的聚合函数有 COUNT、MAX、MIN、SUM。另外在全表扫描时同样支持 LIKE、ORDER BY 、LIMIT 以及 GROUP BY 语法。

  • 并行的全表扫描:如果需要从所有库导出数据,可以通过 SHOW 指令查看表拓扑结构,针对分表并行处理。详见下文。

picture.image

执行 SHOW TOPOLOGY FROM TABLE_NAME 指令获取表拓扑结构。

  
DRDS 支持高效的数据扫描方式,并支持在全表扫描时使用聚合函数进行统计汇总。  
  
常见的扫描场景如下:  
  
没有分库分表:DRDS 会把原 SQL 传递到后端 MySQL 执行。这种情况下 DRDS 支持任何聚合函数。  
  
非全表扫描:SQL 经过 DRDS 路由后,发送到单个 MySQL 库上执行。比如说拆分键在 WHERE 中是等于关系时,就会出现非全表扫描。此时同样可以支持任何聚合函数。  
  
全表扫描:目前支持的聚合函数有 COUNT、MAX、MIN、SUM。另外在全表扫描时同样支持 LIKEORDER BY 、LIMIT 以及 GROUP BY 语法。  
  
并行的全表扫描:如果需要从所有库导出数据,可以通过 SHOW 指令查看表拓扑结构,针对分表并行处理。详见下文。  
  
   
  
   
  
执行 SHOW TOPOLOGY FROM TABLE_NAME 指令获取表拓扑结构。
  1. 非分库分表的表默认存储在第0个分库。
  2. 针对 TOPOLOGY 进行单表遍历。 

/!TDDL:node='DRDS_00_RDS'*/ SELECT * FROM DRDS_USERS;

/!TDDL:node='DRDS_01_RDS'*/ SELECT * FROM DRDS_USERS;

  • 第1个分库运行当前 SQL

  • 第0个分库运行当前 SQL

注意:推荐每次扫描前执行 SHOW TOPOLOGY FROM TABLE_NAME 获取最新的表拓扑结构。

若为分表,则 SQL 中的表名为分表名。

比如:

  
DRDS>SHOW TOPOLOGY FROM c_schedule  
+--------------+-----------------------------------------------+----------------------+  
| ID | GROUP_NAME | TABLE_NAME |  
+--------------+-----------------------------------------------+----------------------+  
| 0 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0000 | c_schedule |  
+--------------+-----------------------------------------------+----------------------+  
返回行数: 1 耗时: 6.00 ms.  
DRDS>SHOW TOPOLOGY FROM cs_fb  
+--------------+-----------------------------------------------+----------------------+  
| ID | GROUP_NAME | TABLE_NAME |  
+--------------+-----------------------------------------------+----------------------+  
| 0 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0000 | cs_fb_ojR3_00 |  
| 1 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0000 | cs_fb_ojR3_01 |  
| 2 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0000 | cs_fb_ojR3_02 |  
| 3 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0001 | cs_fb_ojR3_03 |  
| 4 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0001 | cs_fb_ojR3_04 |  
| 5 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0001 | cs_fb_ojR3_05 |  
| 6 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0002 | cs_fb_ojR3_06 |  
| 7 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0002 | cs_fb_ojR3_07 |  
| 8 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0002 | cs_fb_ojR3_08 |  
| 9 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0003 | cs_fb_ojR3_09 |  
| 10 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0003 | cs_fb_ojR3_10 |  
| 11 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0003 | cs_fb_ojR3_11 |  
| 12 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0004 | cs_fb_ojR3_12 |  
| 13 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0004 | cs_fb_ojR3_13 |  
| 14 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0004 | cs_fb_ojR3_14 |  
| 15 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0005 | cs_fb_ojR3_15 |  
| 16 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0005 | cs_fb_ojR3_16 |  
| 17 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0005 | cs_fb_ojR3_17 |  
| 18 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0006 | cs_fb_ojR3_18 |  
| 19 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0006 | cs_fb_ojR3_19 |  
| 20 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0006 | cs_fb_ojR3_20 |  
| 21 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0007 | cs_fb_ojR3_21 |  
| 22 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0007 | cs_fb_ojR3_22 |  
| 23 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0007 | cs_fb_ojR3_23 |  
+--------------+-----------------------------------------------+----------------------+  
返回行数: 24 耗时: 18.00 ms.

查询:

  
/!TDDL:node='ONE\_www\_ZyiZ\_1586333425057BUHJ\_VA8S\_0006'*/ SELECT * FROM cs\_fb\_ojR3\_19 ;

计算表的方法:比如:

select (2020*12+3)%8

2020为年,年*12,加上月份3,再除以物理库8个。

0
0
0
0
评论
未登录
暂无评论