索引的分类

发布时间:2023-05-19

一、按照数据结构分类

索引按照数据结构的分类通常可以分为哈希索引和B树索引。哈希索引是根据关键字直接查找对应数据的索引方法,它通过一个哈希函数将关键字映射到一个桶中,从而快速定位到对应的记录。哈希索引适用于等值查询,但不支持范围查询。B树索引是一种常见的树状结构索引方法,它支持范围查询,适用于大多数数据库系统。B树索引通常比哈希索引慢些,但它对磁盘的访问更加友好。

//哈希索引示例
CREATE TABLE Users (
    ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    Name VARCHAR(30) NOT NULL,
    Age INT UNSIGNED NOT NULL,
    Email VARCHAR(50),
    PRIMARY KEY (ID),
    INDEX(Name)
) Engine=MEMORY;
//B树索引示例
CREATE TABLE Users (
    ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    Name VARCHAR(30) NOT NULL,
    Age INT UNSIGNED NOT NULL,
    Email VARCHAR(50),
    PRIMARY KEY (ID),
    INDEX(Name)
) Engine=InnoDB;

二、按照索引类型分类

索引按照索引类型的分类通常可以分为唯一索引和非唯一索引。唯一索引指的是表中每个索引列的值都是唯一的,它可以保证数据的一致性和完整性。非唯一索引指的是索引列中的值可以重复,它可以用于加速数据的查询。

//唯一索引示例
CREATE TABLE Users (
    ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    Name VARCHAR(30) NOT NULL,
    Age INT UNSIGNED NOT NULL,
    Email VARCHAR(50),
    PRIMARY KEY (ID),
    UNIQUE (Email)
) Engine=InnoDB;
//非唯一索引示例
CREATE TABLE Users (
    ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    Name VARCHAR(30) NOT NULL,
    Age INT UNSIGNED NOT NULL,
    Email VARCHAR(50),
    PRIMARY KEY (ID),
    INDEX(Name)
) Engine=InnoDB;

三、按照使用场景分类

索引按照使用场景的分类通常可以分为主键索引、外键索引和全文索引。主键索引是指针对表中的主键列建立的索引,它可以保证数据的唯一性。外键索引是指针对表中的外键列建立的索引,它可以加速该列的查询和连接操作。全文索引是针对文本列建立的索引,它可以提高文本的搜索效率。

//主键索引示例
CREATE TABLE Users (
    ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    Name VARCHAR(30) NOT NULL,
    Age INT UNSIGNED NOT NULL,
    Email VARCHAR(50),
    PRIMARY KEY (ID),
    INDEX(Name)
) Engine=InnoDB;
//外键索引示例
CREATE TABLE Orders (
    ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    UserID INT UNSIGNED NOT NULL,
    ProductID INT UNSIGNED NOT NULL,
    Quantity INT UNSIGNED NOT NULL,
    PRIMARY KEY (ID),
    INDEX(UserID),
    FOREIGN KEY (UserID) REFERENCES Users(ID)
) Engine=InnoDB;
//全文索引示例
CREATE TABLE Posts (
    ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    Title VARCHAR(100) NOT NULL,
    Body TEXT NOT NULL,
    PRIMARY KEY (ID),
    FULLTEXT (Title, Body)
) Engine=InnoDB;

四、按照数据类型分类

索引按照数据类型的分类通常可以分为单列索引和多列索引。单列索引针对表中的单个列建立的索引,它适用于单列查询。多列索引针对表中多个列建立的索引,它适用于多列查询和联合查询。

//单列索引示例
CREATE TABLE Users (
    ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    Name VARCHAR(30) NOT NULL,
    Age INT UNSIGNED NOT NULL,
    Email VARCHAR(50),
    PRIMARY KEY (ID),
    INDEX(Name)
) Engine=InnoDB;
//多列索引示例
CREATE TABLE Users (
    ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    Name VARCHAR(30) NOT NULL,
    Age INT UNSIGNED NOT NULL,
    Email VARCHAR(50),
    PRIMARY KEY (ID),
    INDEX(Name, Age)
) Engine=InnoDB;