数据库-索引

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

索引的分类:

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

1. 基本原理

新建一个表:

字段 数据类型
id int
name varchar(20)

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

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

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);

你可能感兴趣的:(数据库)