数据库-索引

本文介绍了数据库索引的基本原理,详细阐述了主键索引、唯一索引和普通索引的特性及创建方法。通过索引,可以显著提高海量数据的检索速度,将线性查找转变为二叉树查找,降低时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

索引:提高海量数据的检索速度。

索引的分类:

  • 主键索引(primary key)
  • 唯一索引(unique)
  • 普通索引(index)
  • 全文索引(fulltest)

1. 基本原理

新建一个表:

字段数据类型
idint
namevarchar(20)

假设表中有 10000 个记录,id 从 1-10000。

  1. 没有建立索引,需要从头到尾遍历记录直到找到你所要查找的数据,若你要查找的 name 的 id 为10000,那么按照 id 查找你就需要查找 10000 次。时间复杂度为 O(N)
  2. 如果对这个“ID”建立了索引,即从小到大进行了排序之后我们就可以采用二叉树的形式进行查找。那么我们只需要log210000次。时间复杂度为 log2N
    在这里插入图片描述
    无索引是线性查找,有索引的查找是二叉树查找

2. 主键索引

特点:

  1. 一个表中,最多有一个主键索引
  2. 主键索引效率高
  3. 创建主键索引的嘞,它的值不能为空 (null),且不能重复
  4. 主键索引的列基本上是 int 类型
  5. 主键索引可以做外键

创建:

  1. 在创建表的时候,直接在字段名后指定主键索引,primary key
CREATE TABLE user1(id INT PRIMARY KEY, name VARCHAR(20));
  1. 在创建表的最后,指定某列或几列为主键索引
CREATE TABLE user2(id INT, name VARCHAR(20)PRIMARY KEY(id));
  1. 创建表之后再创建主键
CREATE TABLE user3(id INT, name VARCHAR(20));
ALTER TABLE user3 ADD PRIMARY KEY(id);

3. 唯一索引

特点:

  1. 一个表中可以有多个唯一索引
  2. 查询效率高
  3. 如果再某一列建立唯一索引,必须保证这列不能有重复数据
  4. 如果一个唯一索引上指定 not null,等价于主键索引

创建:

  1. 在创建表的时候,直接在某列后指定 unique 唯一属性
CREATE TABLE user1(id INT PRIMARY KEY, name VARCHAR(20) UNIQUE);
  1. 在创建表的最后,指定某列或几列为主键索引
CREATE TABLE user2(id INT PRIMARY KEY, name VARCHAR(20)UNIQUE(name));
  1. 创建表之后再创建主键
CREATE TABLE user3(id INT PRIMARY KEY, name VARCHAR(20));
ALTER TABLE user3 ADD UNIQUE(name);

4. 普通索引

特点:

  1. 一个表中可以有多个普通索引
  2. 如果某列需要创建索引,但是该列有重复的值,那么我们就应该使用普通索引

创建:

  1. 在创建表的时候,直接在某列后指定为普通索引
CREATE TABLE user1(id INT PRIMARY KEY, name VARCHAR(20),INDEX(name);
  1. 在创建表的最后,指定某列为普通索引
CREATE TABLE user2(id INT PRIMARY KEY, name VARCHAR(20));
CREATE INDEX idx_name ON user2(name);
  1. 创建表之后,创建一个索引名为 idx_name 的索引
CREATE TABLE user3(id INT PRIMARY KEY, name VARCHAR(20));
CREATE INDEX idx_name ON user3(name);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值