Mycat如何建立二级索引?

提问者:帅平 问题分类:数据库
Mycat如何建立二级索引?
2 个回答
帅平
帅平 提问者
如果是表已经创建了,则添加二级索引的示例语法如下:
//建立分片表
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后面的是覆盖列,冗余的信息,用于减少扫描原分片表或者优化为不扫描原分片表。
发布于:1年前 (2023-03-24) IP属地:四川省
帅的被人砍
帅的被人砍
索引列与覆盖列必须包含原分片表的主键,原分片字段,否则无法进行数据插入,无法正确路由
发布于:1年前 (2023-03-24) IP属地:四川省
帅平
帅平 提问者
如果是还没有创建表,则添加二级索引的示例语法如下:
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后面的是覆盖列,冗余的信息,用于减少扫描原分片表或者优化为不扫描原分片表。
发布于:1年前 (2023-03-24) IP属地:四川省
你我这辈子最的依靠
你我这辈子最的依靠
索引列与覆盖列必须包含原分片表的主键,原分片字段,否则无法进行数据插入,无法正确路由
发布于:1年前 (2023-03-24) IP属地:四川省
我来回答