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