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 两个列共同组成了一个复合主键。
相关推荐
小二·2 分钟前
MyBatis基础入门《十六》企业级插件实战:基于 MyBatis Interceptor 实现 SQL 审计、慢查询监控与数据脱敏
数据库·sql·mybatis
bing.shao2 分钟前
Golang WaitGroup 踩坑
开发语言·数据库·golang
专注VB编程开发20年10 分钟前
C#内存加载dll和EXE是不是差不多,主要是EXE有入口点
数据库·windows·microsoft·c#
小二·19 分钟前
MyBatis基础入门《十二》批量操作优化:高效插入/更新万级数据,告别慢 SQL!
数据库·sql·mybatis
何中应24 分钟前
【面试题-6】MySQL
数据库·后端·mysql·面试题
路遥_1327 分钟前
银河麒麟 V10 安装部署瀚高数据库 HighGoDB 4.5 全流程(统信UOS Server 20同理)
数据库
TDengine (老段)29 分钟前
从关系型数据库到时序数据库的思维转变
大数据·数据库·mysql·时序数据库·tdengine·涛思数据·非关系型数据库
老兵发新帖29 分钟前
ubuntu网络管理功能分析
数据库·ubuntu·php
2301_7683502338 分钟前
MySQL服务配置与管理
数据库·mysql
+VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue旅游信息推荐系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计·旅游