解决数据库中数据过于庞大的方式之一:索引

索引是数据库中用于加快数据查询的一种数据结构。它类似于书籍的目录,通过索引可以帮助数据库系统快速定位和访问特定数据。在数据库表中,索引由一个或多个列的值组成,并且每个索引都有一个唯一的名称。通过创建索引,数据库系统会在内部维护一个数据结构,以便更快地定位和检索特定的数据行。

索引的主要作用是:

  1. 提高查询性能:通过使用索引,数据库可以快速定位满足查询条件的数据,减少了数据库扫描的量,从而提高了查询效率。
  2. 加速数据排序:如果查询需要按某一列或多个列进行排序,索引可以加速这些排序操作,减少排序所需的时间。
  3. 优化连接操作:当进行连接查询时,索引可以帮助数据库系统快速匹配关联的数据行,提高连接操作的性能

下面来区分一下有无索引的区别: 

假设有一个名为"Students"的数据库表,包含以下几个字段:学生ID(student_id)、姓名(name)、年龄(age)、性别(gender)、分数(score)。

现在我们想要通过姓名来快速查询学生的信息,可以考虑在"Students"表的"name"列上创建索引。

创建索引的SQL语句如下:

CREATE INDEX idx_name ON Students(name); 

创建完索引后,当执行查询语句时,数据库会基于索引来快速定位匹配的数据行。

例如,我们要查询名为"Tom"的学生信息:

SELECT * FROM Students WHERE name = 'Tom'; 

当索引创建后,数据库系统会先查找索引中的相应记录,然后返回匹配的数据行。

如果没有为"Students"表的"name"列创建索引,那么在执行以下查询语句时:

SELECT * FROM Students WHERE name = 'Tom'; 

数据库系统将需要执行全表扫描来找到满足条件的数据行。它会逐行扫描整个"Students"表,比较每一行的"name"字段的值是否与"Tom"相等。

这种全表扫描的方式可能会导致以下问题:

  1. 性能较低:当"Students"表的数据量较大时,全表扫描需要遍历所有数据行,耗费更多的时间和资源。
  2. 高消耗:不使用索引的查询需要较多的磁盘IO和CPU资源,对数据库系统而言是一种较为昂贵的操作。

 

引入两种常见索引:BTREE索引和HASH索引

假设有一个名为"Students"的数据库表,包含以下几个字段:学生ID(student_id)、姓名(name)和年龄(age)。

  1. BTREE索引:

    • 假设在"Students"表的"name"列上创建了B树索引。​
    • B树索引可以有效地支持范围查询和排序操作。例如,如果查询需要按照姓名进行范围查询,比如查找姓氏为"Zhang"到"Li"之间的学生
    SELECT * FROM Students WHERE name >= 'Zhang' AND name <= 'Li'; 
     

    如这样的查询,B树索引会快速定位到满足条件的数据行。

  2. HASH索引:

    • 假设在"Students"表的"student_id"列上创建了哈希索引。​
    • 哈希索引通过哈希函数将索引值映射到哈希表中的特定位置,可以快速查找到匹配的数据行。
    SELECT * FROM Students WHERE student_id = 12345;

总结: B树索引适用于支持范围查询、排序和部分匹配,而哈希索引适用于等值查找。B树索引可以通过索引的有序性提供更多功能,但哈希索引通常具有更快的查找速度。根据具体的查询需求和数据特点,选择适当的索引类型是很重要的。

猜你喜欢

转载自blog.csdn.net/weixin_60246228/article/details/132449424