MySQL 约束
MySQL 运算符 

MySQL 索引

在 MySQL 中,索引(Index)是用于提高数据库表查询性能的重要工具。索引是一种数据结构,它能快速定位和访问表中特定行的方法,类似于书籍的目录。在 MySQL 中,常见的索引类型包括普通索引、唯一索引、主键索引和全文索引等。


普通索引(Normal Index)

普通索引是最基本的索引类型,它没有唯一性要求,可以允许列中出现重复的值。可以为表的一个或多个列创建普通索引。

CREATE TABLE students (
    student_id INT PRIMARY KEY,
    student_name VARCHAR(50) NOT NULL,
    class_id VARCHAR(50) NOT NULL,
    INDEX idx_class_id (class_id)
);

在上面的例子中,为 students 表的 class_id 列创建了一个名为 idx_class_id 的普通索引。


添加普通索引到现有表

CREATE INDEX idx_class_id ON students(class_id);

或者使用 ALTER TABLE 添加:

ALTER TABLE students ADD INDEX idx_class_id (class_id);


唯一索引(Unique Index)

唯一索引确保列中的所有值都是唯一的,允许NULL值(MySQL中的唯一索引允许多个NULL值,但只允许一个非NULL值)。通常用于要求列值唯一的情况。

创建表时添加唯一索引:

CREATE TABLE students (
    student_id INT PRIMARY KEY,
  student_name VARCHAR(50),
  email VARCHAR(50) UNIQUE
);

在上面的例子中,email 列被指定为唯一索引,确保电子邮件地址在表中都是唯一的。

添加唯一索引到现有表:

CREATE UNIQUE INDEX idx_email ON students (email);

或者使用 ALTER TABLE 添加:

ALTER TABLE students ADD UNIQUE INDEX idx_email (email);


主键索引(Primary Key Index)

主键索引是一种特殊的唯一索引,它唯一标识表中的每一行,并且不允许有NULL值。每个表只能有一个主键索引。

创建表时指定主键索引:

CREATE TABLE students (
    student_id INT PRIMARY KEY,
  student_name varchar(30) NOT NULL,
  email VARCHAR(30) NOT NULL
);

在上面的例子中,student_id 列被指定为主键索引。

添加主键索引到现有表:

ALTER TABLE students ADD PRIMARY KEY (student_id);


全文索引(Full-Text Index)

全文索引用于在文本字段上执行全文搜索,它们只能用于 MyISAM 和 InnoDB 存储引擎的表,并且只能用于 CHAR, VARCHAR, or TEXT 类型的列。

创建表时添加全文索引:

CREATE TABLE articles (
    article_id INT PRIMARY KEY,
  title VARCHAR(100),
  content TEXT,
  FULLTEXT (title, body)
) ENGINE=InnoDB;

在上面的例子中,为 articles 表的 title 和 content 列创建了一个全文索引。

添加全文索引到现有表:

ALTER TABLE articles ADD FULLTEXT INDEX idx_fulltext (title, content);


总结

索引在 MySQL 中是提高查询性能和数据检索效率的关键因素之一。正确选择和使用索引可以显著减少查询的响应时间,但过多或不恰当使用索引可能会降低写入操作的性能。因此,在设计和优化数据库时,需要根据具体的查询需求和数据库负载来合理选择和使用索引。