DRDS分库分表学习-如何高效扫描 DRDS 数据
原创
©著作权归作者所有:来自51CTO博客作者沐雪编程人生的原创作品,请联系作者获取转载授权,否则将追究法律责任
DRDS 支持高效的数据扫描方式,并支持在全表扫描时使用聚合函数进行统计汇总。
常见的扫描场景如下:
- 没有分库分表: DRDS 会把原 SQL 传递到后端 MySQL 执行。这种情况下 DRDS 支持任何聚合函数。
- 非全表扫描:SQL 经过 DRDS 路由后,发送到单个 MySQL 库上执行。比如说拆分键在 WHERE 中是等于关系时,就会出现非全表扫描。此时同样可以支持任何聚合函数。
- 全表扫描:目前支持的聚合函数有 COUNT、MAX、MIN、SUM。另外在全表扫描时同样支持 LIKE、ORDER BY 、LIMIT 以及 GROUP BY 语法。
- 并行的全表扫描:如果需要从所有库导出数据,可以通过 SHOW 指令查看表拓扑结构,针对分表并行处理。详见下文。
执行 SHOW TOPOLOGY FROM TABLE_NAME 指令获取表拓扑结构。
mysql:> SHOW TOPOLOGY FROM DRDS_USERS;
+------+-------------------+--------------+
| ID | GROUP_NAME | TABLE_NAME |
+------+-------------------+--------------+
| 0 | DRDS_00_RDS | drds_users |
| 1 | DRDS_01_RDS | drds_users |
+------+-------------------+--------------+
2 rows in set (0.06
- 非分库分表的表默认存储在第0个分库。
- 针对 TOPOLOGY 进行单表遍历。
/!TDDL:node='DRDS_00_RDS'*/ SELECT * FROM
/!TDDL:node='DRDS_01_RDS'*/ SELECT * FROM
注意:推荐每次扫描前执行 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
查询:
/!TDDL:node='ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0006'*/ SELECT * FROM
计算表的方法:比如:
2020为年,年*12,加上月份3,再除以物理库8个。
作者:沐雪
文章均系作者原创或翻译,如有错误不妥之处,欢迎各位批评指正。本文版权归作者所有,如需转载恳请注明。
为之网-热爱软件编程 http://www.weizhi.cc/