PolarDB-X 1.0-SQL 手册-DDL-CREATE INDEX

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: PolarDB-X支持创建局部索引和全局二级索引 (Global Secondary Index, GSI) ,同时支持删除这两种索引。

PolarDB-X支持创建局部索引和全局二级索引 (Global Secondary Index, GSI) ,同时支持删除这两种索引。

PolarDB-X全局二级索引要求MySQL版本需为5.7或以上,且内核小版本需为5.4.1或以上。关于全局二级索引基本原理,请参见全局二级索引.

局部索引

关于局部索引,详情请参见CREATE INDEX

全局二级索引

语法:


  1. CREATE [UNIQUE]
  2.    GLOBAL INDEX index_name [index_type]
  3.    ON tbl_name (index_sharding_col_name,...)
  4.    global_secondary_index_option
  5.    [index_option]
  6.    [algorithm_option | lock_option]...

  7. # 全局二级索引特有语法,具体说明请参见CREATE TABLE文档
  8. global_secondary_index_option:
  9.    [COVERING (col_name,...)]
  10.    drds_partition_options

  11. # 分库分表子句,具体说明请参见CREATE TABLE文档
  12. drds_partition_options:
  13.    DBPARTITION BY db_sharding_algorithm
  14.    [TBPARTITION BY {table_sharding_algorithm}[TBPARTITIONS num]]

  15. db_sharding_algorithm:
  16.    HASH([col_name])
  17.  |{YYYYMM|YYYYWEEK|YYYYDD|YYYYMM_OPT|YYYYWEEK_OPT|YYYYDD_OPT}(col_name)
  18.  | UNI_HASH(col_name)
  19.  | RIGHT_SHIFT(col_name, n)
  20.  | RANGE_HASH(col_name, col_name, n)

  21. table_sharding_algorithm:
  22.    HASH(col_name)
  23.  |{MM|DD|WEEK|MMDD|YYYYMM|YYYYWEEK|YYYYDD|YYYYMM_OPT|YYYYWEEK_OPT|YYYYDD_OPT}(col_name)
  24.  | UNI_HASH(col_name)
  25.  | RIGHT_SHIFT(col_name, n)
  26.  | RANGE_HASH(col_name, col_name, n)

  27. # 以下为 MySQL DDL 语法
  28. index_sharding_col_name:
  29.    col_name [(length)][ASC | DESC]# length 参数仅用于在索引表拆分键上创建局部索引

  30. index_option:
  31.    KEY_BLOCK_SIZE [=] value
  32.  | index_type
  33.  | WITH PARSER parser_name
  34.  | COMMENT 'string'

  35. index_type:
  36.    USING {BTREE | HASH}

  37. algorithm_option:
  38.    ALGORITHM [=]{DEFAULT|INPLACE|COPY}

  39. lock_option:
  40.    LOCK [=]{DEFAULT|NONE|SHARED|EXCLUSIVE}

CREATE GLOBAL INDEX系列语法用于在建表后添加GSI,该系列语法在MySQL语法上新引入了GLOBAL关键字,用于指定添加的索引类型为GSI。目前建表后创建GSI存在一定限制,关于GSI的限制与约定,详情请参见使用全局二级索引

关于全局二级索引定义子句详细说明,请参见CREATE TABLE

示例

下面以建立普通全局二级索引为例,介绍在建表后创建GSI。


  1. # 先建表
  2. CREATE TABLE t_order (
  3.  `id` bigint(11) NOT NULL AUTO_INCREMENT,
  4.  `order_id` varchar(20) DEFAULT NULL,
  5.  `buyer_id` varchar(20) DEFAULT NULL,
  6.  `seller_id` varchar(20) DEFAULT NULL,
  7.  `order_snapshot` longtext DEFAULT NULL,
  8.  `order_detail` longtext DEFAULT NULL,
  9.  PRIMARY KEY (`id`),
  10.  KEY `l_i_order`(`order_id`)
  11. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by hash(`order_id`);

  12. # 再建全局二级索引
  13. CREATE GLOBAL INDEX `g_i_seller` ON t_order (`seller_id`) dbpartition by hash(`seller_id`);

其中:

  • 主表:t_order 只分库不分表,分库的拆分方式为按照 order_id 列进行哈希。
  • 索引表:g_i_seller 只分库不分表,分库的拆分方式为按照 seller_id 列进行哈希。
  • 索引定义子句:GLOBAL INDEX `g_i_seller` ON t_order (`seller_id`) dbpartition by hash(`seller_id`)

通过 SHOW INDEX 查看索引信息,包含拆分键order_id上的局部索引,和seller_id、id和order_id上的GSI,其中seller_id为索引表的拆分键,id和order_id为默认的覆盖列(主键和主表的拆分键)。

关于GSI的限制与约定,详情请参见使用全局二级索引,SHOW INDEX详细说明,请参见SHOW INDEX


  1. mysql> show index from t_order;
  2. +---------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+----------+---------------+
  3. | TABLE   | NON_UNIQUE | KEY_NAME   | SEQ_IN_INDEX | COLUMN_NAME | COLLATION | CARDINALITY | SUB_PART | PACKED | NULL | INDEX_TYPE | COMMENT  | INDEX_COMMENT |
  4. +---------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+----------+---------------+
  5. | t_order |          0| PRIMARY    |            1| id          | A         |           0|     NULL | NULL   |      | BTREE      |          |               |
  6. | t_order |          1| l_i_order  |            1| order_id    | A         |           0|     NULL | NULL   | YES  | BTREE      |          |               |
  7. | t_order |          1| g_i_seller |            1| seller_id   | NULL      |           0|     NULL | NULL   | YES  | GLOBAL     | INDEX    |               |
  8. | t_order |          1| g_i_seller |            2| id          | NULL      |           0|     NULL | NULL   |      | GLOBAL     | COVERING |               |
  9. | t_order |          1| g_i_seller |            3| order_id    | NULL      |           0|     NULL | NULL   | YES  | GLOBAL     | COVERING |               |
  10. +---------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+----------+---------------+

您可以通过SHOW GLOBAL INDEX单独查看GSI信息,详细说明请参见SHOW GLOBAL INDEX


  1. mysql> show global index from t_order;
  2. +---------------------+---------+------------+------------+-------------+----------------+------------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+--------+
  3. | SCHEMA              | TABLE   | NON_UNIQUE | KEY_NAME   | INDEX_NAMES | COVERING_NAMES | INDEX_TYPE | DB_PARTITION_KEY | DB_PARTITION_POLICY | DB_PARTITION_COUNT | TB_PARTITION_KEY | TB_PARTITION_POLICY | TB_PARTITION_COUNT | STATUS |
  4. +---------------------+---------+------------+------------+-------------+----------------+------------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+--------+
  5. | ZZY3_DRDS_LOCAL_APP | t_order |1          | g_i_seller | seller_id   | id, order_id   | NULL       | seller_id        | HASH                |4                  |                  | NULL                | NULL               | PUBLIC |
  6. +---------------------+---------+------------+------------+-------------+----------------+------------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+--------+

查看索引表的结构,索引表包含主表的主键、分库分表键、默认的覆盖列和自定义覆盖列,主键列去除了AUTO_INCREMENT属性,并且去除了主表中的局部索引。


  1. mysql> show create table g_i_seller;
  2. +------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  3. |Table      |CreateTable                                                                                                                                                                                                                                                                                  |
  4. +------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  5. | g_i_seller | CREATE TABLE `g_i_seller`(
  6.  `id` bigint(11) NOT NULL,
  7.  `order_id` varchar(20) DEFAULT NULL,
  8.  `seller_id` varchar(20) DEFAULT NULL,
  9.  PRIMARY KEY (`id`),
  10.  KEY `auto_shard_key_seller_id`(`seller_id`) USING BTREE
  11. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by hash(`seller_id`)|
相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
相关文章
|
6月前
|
SQL 存储 关系型数据库
关系型数据库SQLserver基本 SQL 操作
【7月更文挑战第28天】
60 4
|
6月前
|
SQL 关系型数据库 分布式数据库
PolarDB产品使用问题之相同的SQL语句在不同时间执行EXPLAIN计划显示出不同的索引类型,是什么原因
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
PolarDB产品使用问题之相同的SQL语句在不同时间执行EXPLAIN计划显示出不同的索引类型,是什么原因
|
5月前
|
SQL 安全 关系型数据库
关系型数据库SQL server DELETE 语句
【8月更文挑战第3天】
124 10
|
5月前
|
SQL 关系型数据库 数据库
关系型数据库SQL server UPDATE 语句
【8月更文挑战第3天】
100 10
|
5月前
|
SQL 关系型数据库 BI
关系型数据库SQL server INSERT 语句
【8月更文挑战第3天】
88 9
|
6月前
|
SQL 存储 监控
|
6月前
|
SQL 关系型数据库 分布式数据库
PolarDB产品使用问题之遇到慢SQL问题,该如何解决
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
5月前
|
SQL 关系型数据库 数据库
|
5月前
|
SQL 关系型数据库 数据库
|
6月前
|
SQL 关系型数据库 分布式数据库
PolarDB产品使用问题之sql运行报错是神么原因
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。

相关产品

  • 云原生分布式数据库 PolarDB-X