数据库中的索引到底起什么作用?
大家好!在使用数据库的过程中,我意识到在包含大量记录的表上使用索引是多么重要。在本文中,我将解释
在表中添加索引有什么区别。
考虑在 Oracle SQL 数据库中创建下面的学生表。
现在我想获取小学学生的详细信息。显然我需要编写一个选择查询。
从学生中选择*,其中学生年级=“小学”;
现在会发生什么?
在内部,它识别列 student_grade 并按顺序搜索与 Primary 匹配的所有记录。
它找到第一条与主表匹配的记录并返回该行。它找到第二条与主表匹配的记录并返回该行。它继续查找主表。跳过第三条记录,找到第四条与主表匹配的记录。现在它停止了吗?没有。它仍然继续查找主表,直到表的末尾。
对于只有 5 行的表来说它看起来很好,但如果我的表有 10000 条记录怎么办?
这需要花费很多时间,谁会尊重这样的时间延迟呢?
这时,索引就派上用场了,它可以节省时间。我们都知道索引的意义。它保存参考文献,以便更快地访问。一个常见的例子是教科书的索引,它保存了书中所涵盖主题的页码。
现在让我们在 Student_grade 列上创建一个索引并看看会发生什么。
在学生(student_grade)上创建索引student_student_grade_I;
student_student_grade_I 是索引名称。
在我们的表上添加索引后,会创建一个新的数据结构,用于保存学生成绩以及指向表中原始记录的指针。该数据结构是 BTree,其优势在于所有记录都已排序。索引看起来类似于左下方的表格。
现在它找到了 2、3、4 条与 primary 匹配的记录。停止执行,并在 record_pointer 的帮助下返回这些记录。
参考
1)https://www.youtube.com/watch?v=aZjYr87r1b8
2)https://chartio.com/learn/databases/how-does-indexing-work/