2 个回答

如果是表已经创建了,则添加二级索引的示例语法如下:
g_i_user_id是索引名字,它不能与mysql中的索引名重复
其后的user_id是索引列(字段)名字,在这里它就是分片字段,必须与分片字段相同
COVERING后面的是覆盖列,冗余的信息,用于减少扫描原分片表或者优化为不扫描原分片表。
//建立分片表
CREATE TABLE db1.`travelrecord` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` varchar(100) DEFAULT NULL,
`traveldate` date DEFAULT NULL,
`fee` decimal(10,0) DEFAULT NULL,
`days` int DEFAULT NULL,
`blob` longblob,
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by mod_hash(id) tbpartition by mod_hash(id) tbpartitions 2 dbpartitions 2;
//建立全局二级索引
CREATE UNIQUE GLOBAL INDEX `g_i_user_id` ON `db1`.`travelrecord`(`user_id`)
COVERING(`fee`,id)
dbpartition by mod_hash(`user_id`) tbpartition by mod_hash(`user_id`) dbpartitions 2 tbpartitions 2
g_i_user_id是索引名字,它不能与mysql中的索引名重复
其后的user_id是索引列(字段)名字,在这里它就是分片字段,必须与分片字段相同
COVERING后面的是覆盖列,冗余的信息,用于减少扫描原分片表或者优化为不扫描原分片表。
发布于:2年前 (2023-03-24) IP属地:四川省
索引列与覆盖列必须包含原分片表的主键,原分片字段,否则无法进行数据插入,无法正确路由
发布于:2年前 (2023-03-24) IP属地:四川省

如果是还没有创建表,则添加二级索引的示例语法如下:
g_i_user_id是索引名字,它不能与mysql中的索引名重复
其后的user_id是索引列(字段)名字,在这里它就是分片字段,必须与分片字段相同
COVERING后面的是覆盖列,冗余的信息,用于减少扫描原分片表或者优化为不扫描原分片表。
CREATE TABLE IF NOT EXISTS db1.`travelrecord` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` varchar(100) DEFAULT NULL,
`traveldate` date DEFAULT NULL,
`fee` decimal(10, 0) DEFAULT NULL,
`days` int DEFAULT NULL,
`blob` longblob,
PRIMARY KEY (`id`),
KEY `id` (`id`),
GLOBAL INDEX `g_i_user_id`(`user_id`) COVERING (`fee`, id) DBPARTITION BY mod_hash(`user_id`) TBPARTITION BY mod_hash(`user_id`) DBPARTITIONS 2 TBPARTITIONS 2
) ENGINE = InnoDB CHARSET = utf8
DBPARTITION BY mod_hash(id) DBPARTITIONS 2
TBPARTITION BY mod_hash(id) TBPARTITIONS 2
g_i_user_id是索引名字,它不能与mysql中的索引名重复
其后的user_id是索引列(字段)名字,在这里它就是分片字段,必须与分片字段相同
COVERING后面的是覆盖列,冗余的信息,用于减少扫描原分片表或者优化为不扫描原分片表。
发布于:2年前 (2023-03-24) IP属地:四川省
索引列与覆盖列必须包含原分片表的主键,原分片字段,否则无法进行数据插入,无法正确路由
发布于:2年前 (2023-03-24) IP属地:四川省
我来回答
您需要 登录 后回答此问题!