MySQL 数据库中的索引是用来提高查询效率的重要工具。索引可以看作是数据库表中数据的一种排序方式,类似于书籍的目录,可以帮助快速定位数据的位置。
索引的优点:
加快查询速度:
索引可以显著减少检索数据所需的时间。例如,使用 B-Tree 索引可以在 O(log n) 时间内找到特定的键值,而不是遍历整个表(O(n))。
提高数据检索效率:
对于经常执行的查询,索引可以大大提高检索效率。特别是当查询涉及到筛选、排序或连接操作时,索引的作用更加明显。
保证数据唯一性:
唯一索引可以用来强制表中的某些字段具有唯一性,防止数据重复插入。这对于维护数据完整性非常重要。
支持主键和外键约束:
主键索引不仅用于加快查询速度,还用于支持关系数据库中的引用完整性。外键则用来维持不同表之间的关系。
辅助排序和分组:
如果查询涉及到 ORDER BY 或 GROUP BY 子句,那么索引可以用来加速这些操作,特别是当索引列与排序或分组列相同时。
节省资源:
当执行涉及 JOIN 操作的复杂查询时,如果被连接的列上有适当的索引,可以大大减少需要扫描的数据量,从而节省 CPU 资源。
支持全文搜索:
全文索引可以用来执行全文搜索,这是普通索引无法实现的功能。
MySQL 中常见的索引类型:
主键索引(Primary Key Index):
每个表只能有一个主键,主键是唯一的,并且不允许为空。
主键通常用于快速查找表中的记录。
唯一索引(Unique Index):
索引列的值必须是唯一的,但是允许有空值。
可以在一个表中创建多个唯一索引。
全文索引(Full-text Index):
适用于对文本进行全文搜索。
在 MyISAM 和 InnoDB 存储引擎中都支持全文索引。
多列索引(Multiple-column Indexes):
允许在多个列上创建一个索引。
查询时,如果使用了索引定义中的前缀列,则可以利用该索引。
空间索引(Spatial Index 或者 R-Trees):
用于存储几何对象的空间数据类型。
常见于地理信息系统(GIS)应用中。
索引组织表(Index-organized table, IOT):
这种类型的表的行按照主键顺序存储。
Oracle 支持 IOT,但在 MySQL 中不是常见类型。
创建索引的方法:
使用 CREATE INDEX 语句创建索引。
使用 ALTER TABLE 添加索引。
在创建表的时候直接定义索引。