数据库索引(一)

数据库索引是一种用于提高数据库查询性能的数据结构。它类似于书中的索引,通过在数据库表的一列或多列上创建索引,可以加快检索数据的速度

定义

索引是一种数据结构,用于加速数据库表中数据的检索。它类似于书籍的目录,可以快速定位特定数据行,而不必扫描整个表

目的

索引的主要目的是提高数据库查询的速度。通过使用索引,数据库引擎可以更快地定位和访问符合查询条件的行,而不是遍历整个表

类型

主要有两种类型的索引:聚簇索引和非聚簇索引。聚簇索引决定了数据在磁盘上的物理排序,而非聚簇索引则是单独的索引表,包含指向实际数据行的指针

创建

在数据库中,可以通过在表的一列或多列上调用CREATE INDEX语句来创建索引。通常,主键(Primary Key)和唯一约束(Unique Constraint)会自动创建索引

CREATE INDEX index_name ON table_name (column1, column2, ...);

索引的类型

  • 聚簇索引(Clustered Index): 数据行的物理顺序与索引的逻辑顺序一致。一个表只能有一个聚簇索引。

  • 聚簇索引决定了数据表的物理排序方式。表中的数据按照聚簇索引的顺序存储在磁盘上。
  • 一个表只能有一个聚簇索引,因为数据只能以一种方式进行物理排序。
  • 当按照聚簇索引的顺序检索数据时,数据的读取速度通常较快,因为相关的数据存储在相邻的磁盘页上。
  • 聚簇索引通常是主键,但如果表没有主键,则数据库系统可能会选择一个唯一非空列作为聚簇索引
  • 非聚簇索引(Non-Clustered Index): 数据行的物理顺序与索引的逻辑顺序不一致。一个表可以有多个非聚簇索引

  • 非聚簇索引中存储了索引键值和指向实际数据行的指针,而实际数据行存储在独立的位置。
  • 一个表可以有多个非聚簇索引。
  • 数据的物理排序和索引的顺序不一定相同,因此在使用非聚簇索引进行数据检索时可能需要进行额外的磁盘读取。
  • 非聚簇索引通常用于加速检索、排序和过滤等操作。

使用场景

索引适用于那些经常被查询的列,但并不适用于那些很少被查询的列。在某些情况下,过多的索引可能导致性能下降,因为每次插入、更新或删除数据时都需要维护索引。

优缺点

 优点

  • 提高检索性能: 加速SELECT查询操作。
  • 加速排序和聚合操作: 对于ORDER BY和GROUP BY等操作。
  • 加速连接操作: 在连接表时,索引可以减少比较的次数。

缺点

  • 占用存储空间: 索引需要额外的存储空间。
  • 影响写操作性能: 每次插入、更新或删除数据时都需要维护索引,可能导致写操作变慢。
  • 需要定期维护: 索引的维护需要一定的系统资源,定期的重新构建和优化是必要的。

总结

数据库索引是优化数据库查询性能的重要工具,但在使用时需要根据具体的业务需求和数据库引擎的特性进行合理的规划和管理。

  • 谨慎选择索引的列,避免过多的索引。
  • 定期维护和重新构建索引以保持最佳性能。

EXPLAIN 关键字

在 SQL 中,EXPLAIN 是一个用于分析查询执行计划的关键字。它并不是用来查询具体的数据,而是用来了解数据库系统是如何执行你提交的查询的。通过执行计划,你可以查看数据库优化器是如何决定执行查询的,以及查询中涉及的表、索引等信息。

  1. ID(标识符): 每个操作的唯一标识符,用于标识执行计划中的不同步骤。

  2. Select Type(选择类型): 描述查询的类型,例如简单的SELECT、联接、子查询等。

  3. Table(表): 涉及到的表,以及使用的别名。

  4. Partitions(分区): 如果涉及到分区表,会显示相关信息。

  5. Type(连接类型): 描述连接表的方式,常见的有ALL、index、range等。

  6. Possible Keys(可能使用的索引): 列出可能用于加速查询的索引。

  7. Key(实际使用的索引): 显示实际用于执行查询的索引。

  8. Key Length(索引长度): 表示实际使用的索引的长度。

  9. Ref(参考): 显示连接条件。

  10. Rows(行数): 估计或实际处理的行数。

  11. Extra(额外信息): 提供关于执行计划的其他信息,例如使用了临时表、文件排序等。

你可能感兴趣的:(数据库)