一、按照数据结构分类
索引按照数据结构的分类通常可以分为哈希索引和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;