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 两个列共同组成了一个复合主键。
相关推荐
Think Spatial 空间思维36 分钟前
【HTTPS基础概念与原理】TLS握手过程详解
数据库·网络协议·https
laowangpython1 小时前
MySQL基础面试通关秘籍(附高频考点解析)
数据库·mysql·其他·面试
mooyuan天天1 小时前
SQL注入报错“Illegal mix of collations for operation ‘UNION‘”解决办法
数据库·web安全·sql注入·dvwa靶场·sql报错
Johny_Zhao1 小时前
Vmware workstation安装部署微软SCCM服务系统
网络·人工智能·python·sql·网络安全·信息安全·微软·云计算·shell·系统运维·sccm
运维-大白同学2 小时前
go-数据库基本操作
开发语言·数据库·golang
R-sz2 小时前
通过从数据库加载MinIO配置并初始化MinioClient,spring boot之Minio上传
数据库·oracle
洛阳泰山2 小时前
Windows系统部署MongoDB数据库图文教程
数据库·windows·mongodb
医只鸡腿子2 小时前
3.2/Q2,Charls最新文章解读
数据库·数据挖掘·数据分析·深度优先·数据库开发
bang___bang_3 小时前
PostgreSQL内幕剖析——结构与架构
数据库·postgresql
龙俊亨3 小时前
达梦数据库查看各数据库表内容
数据库