041、TiDB特性_在线索引

索引 DDL

索引概述

索引:指向行记录的指针以加快数据检索速度

快速找到表里的行记录

避免全表扫描

提高查询性能

以下 TiDB 约束默认提供索引:

  • Primary Key
  • Unique Key

可以通过 CREATE INDEX 语句创建

  • 索引信息系统表: information_schema.tidb_indexes,索引名称: KEY_NAME
  • SHOW INDEX FROM table_name; 获取索引的定义

Unique Key 和索引

唯一键具有以下特点:

  • 唯一标识表中的单个行
  • 接受 NULL
  • 每张表允许多个唯一键
javascript 复制代码
tidb> CREATE TABLE test.dropme (
   ->   id BIGINT AUTO_RANDOM,
   ->   name CHAR(35) NOT NULL,
   ->   PRIMARY KEY (id),
   ->   UNIQUE KEY (name)
   ->   );
javascript 复制代码
tidb> SELECT key_name, column_name, index_id FROM information_schema.tidb_indexes 
   -> WHERE table_schema='test' AND table_name='dropme';
+----------+-------------+----------+
| key_name | column_name | index_id |
+----------+-------------+----------+
| PRIMARY  | id          |        0 |
|  name    | name        |        1 |
+----------+-------------+----------+

二级索引

  • 二级索引:主键以外的索引
  • 唯一二级索引:具有约束条件的二级索引

创建二级索引:

创建表时使用 INDEX 或 KEY 关键字

对现有的表:

javascript 复制代码
ALTER TABLE ... ADD INDEX/KEY ...
CREATE INDEX ... ON ...
tidb> CREATE TABLE test.ggg (id INT, name CHAR(30), KEY(name));

tidb> CREATE INDEX ggg_idx ON test.ggg (id);

tidb> CREATE TABLE test.gg (id INT, id2 INT, name CHAR(30), INDEX(name));

tidb> ALTER TABLE test.gg ADD KEY (id);

tidb> ALTER TABLE test.gg ADD INDEX (id2);

复合 Primary Key

复合主键需要两列或更多列才能唯一标识行

组成复合主键的各个列单独并不需要保证唯一性

javascript 复制代码
infromation_schema.tidb_indexes
COLUMN_NAME
SEQ_IN_INDEX
javascript 复制代码
CREATE TABLE `stars` (
  `name` char(20) NOT NULL DEFAULT '',
  `mass` float NOT NULL DEFAULT 0.0 COMMENT '10**24 kg',
  ...
  `distance_from_earth` float COMMENT 'light year',
  `discover_date` datetime NOT NULL,
  PRIMARY KEY (`name`, `discover_date`)
);
name 和 discover_date 两个列共同组成了一个复合主键。
相关推荐
杨云龙UP14 分钟前
Oracle 19c RAC到RAC Active Data Guard标准搭建与巡检指南
运维·服务器·数据库·oracle·adg·data guard·rac到rac
许彰午23 分钟前
06-Oracle卸载与重装完整流程
数据库·oracle
ss27331 分钟前
AI全栈实战 | 3.6-01 数据库与 ORM:学过 MyBatis 再看 SQLAlchemy,才知道“半自动“和“全自动“差在哪
数据库·mybatis
我的xiaodoujiao36 分钟前
Django 基础知识详细图文教程 13-Django 模型定义与使用 3
数据库·后端·python·测试工具·oracle·django
麦壳饼39 分钟前
Docker 快速上手:5 分钟运行 SonnetDB
数据库·docker·sonnetdb
for_ever_love__1 小时前
缓存穿透、击穿、雪崩:三个经典问题与完整解决方案
java·数据库·redis·缓存·哈希算法·布隆过滤器·雪崩
麦壳饼1 小时前
CLI 工具安装与使用:sndb 命令行指南
数据库·sonnetdb
龙腾AI白云1 小时前
数字孪生驱动大模型工业知识库:为具身机器人植入领域专业经验
数据库·人工智能·机器学习·知识图谱
我科绝伦(Huanhuan Zhou)1 小时前
oracle RAC共享存储换盘操作指南
数据库·oracle
wangbing11251 小时前
重建oracle服务
数据库·oracle