DRDS使用
表操作
查看所有表
SHOW TABLES;
查看建表语句
# 查看单表建表语句
SHOW CREATE TABLE single_tbl;
# 查看通过HASH函数进行拆分的表的建表语句
SHOW CREATE TABLE multi_db_single_tbl;
##
按ID分表
使用HASH函数进行分表。
CREATE TABLE multi_db_single_tbl(
id int auto_increment,
name varchar(30),
primary key(id)
) dbpartition by hash(id);
按ID分库
CREATE TABLE `post` (
`postingType` int NOT NULL,
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`acceptedAnswer` bigint(20) DEFAULT NULL,
`parentId` bigint(20) DEFAULT NULL,
`score` int DEFAULT NULL,
`tags` varchar(128) DEFAULT NULL,
PRIMARY KEY (`id`)
) DBPARTITION BY hash(id) ENGINE=InnoDB DEFAULT CHARSET=utf8;
删除表
# 删除单表
DROP TABLE single_tbl;
# 删除通过HASH函数进行拆分的表
DROP TABLE multi_db_single_tbl;
列操作
# 增加列
ALTER TABLE multi_db_single_tbl ADD COLUMN textcol text;
# 修改列数据类型
ALTER TABLE multi_db_single_tbl MODIFY COLUMN textcol varchar(40);
# 删除列
ALTER TABLE multi_db_single_tbl DROP COLUMN textcol;
索引操作
# 创建索引
CREATE INDEX idx_name ON multi_db_single_tbl(name);
ALTER TABLE multi_db_single_tbl ADD INDEX idx_name(name);
# 查看索引
SHOW INDEX FROM multi_db_single_tbl;
# 删除索引
DROP INDEX idx_name ON multi_db_single_tbl;
ALTER TABLE multi_db_single_tbl DROP INDEX idx_name;
小表广播
对于数据量少,且数据变化不频繁,数据一致性要求不高的单库单表,为了解决跨库问题,可以考虑使用小表广播。小表广播是指将表复制到每个分库上,在分库上通过同步机制实现数据一致,但存在秒级延迟。好处在于,可以将 JOIN 操作下推到底层的分库,来避免跨库 JOIN,提高执行效率。如下所示,建表时使用 BROADCAST 关键字:
CREATE TABLE users (
user_id int,
user_name varchar(50),
create_time date,
primary key(id)
) ENGINE=InnoDB BROADCAST;
大数据导入示例
分库分表
当一张逻辑表的分库拆分方式与分表拆分方式不一致时,若SQL查询没有同时带上分库条件与分表条件,则PolarDB-X 1.0在查询过程会进行全分库扫描或全分表扫描操作。
SQL语法
dbpartition:分库
tbpartition :分表
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[drds_partition_options]
[partition_options]
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
[table_options]
[drds_partition_options]
[partition_options]
select_statement
drds_partition_options:
DBPARTITION BY
{ {HASH|YYYYMM|YYYYWEEK|YYYYDD|...}([column])}
[TBPARTITION BY
{ {HASH|MM|DD|WEEK|MMDD|YYYYMM|YYYYWEEK|YYYYDD|...}(column)}
[TBPARTITIONS num]
]
实名制稽核分库分表设计
1、保证用户数据与照片数据必须在同一个分库内,避免跨库join
2、使用UNI_HASH算法,避免夸库join
create table test_hash_tb (
id int,
name varchar(30) DEFAULT NULL,
create_time datetime DEFAULT NULL,
primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
dbpartition by UNI_HASH(ID)
tbpartition by UNI_HASH(ID) tbpartitions 4;
3、数据尽可能平分
4、使用手机号码分库,使用省份分表
5、单库单表要明确
6、