原文地址:https://my.oschina.net/gooke/blog/678556

以下内容为个人笔记:)


场景:

有张数据表employee,里面有3列Employee_Name,Employee_Age,Employee_Address,有上万行的记录

现在想找出叫Jesus的员工:

  SELECT * FROM Employee WHERE Employee_Name = 'Jesus'

没有索引的话

数据库会逐行遍历整张表,找Employee_Name = 'Jesus'的员工,并且找到了也不会停止,做全表扫描

索引:
~~索引就是数据结构~~

索引是基于数据表中的某一列创建的,并且这些数据存储在某个数据结构中。

使用哪种数据结构呢?

B- 树是用于索引最常见的数据结构(高效、有序...)。但也可以自己指定。

HASH索引也不错,对于比较字符串很快,但一定范围的做不到。R- 树索引通常用来解决空间问题。

索引为啥能提高效率呢

索引的本质是 存储列值的数据结构。像B-树的数据结构,是有序的,会把列值按字母顺序排序,所以大大的缩减了查找时间。

索引里还存了些啥

列值+对应行的指针

数据库咋知道啥时候使用索引

数据库会自己判断,首先判断这个列有没有设置索引,再判断值不值的用(比如有些时候做全表扫描要比使用数据库索引高效)。

当然啦也可以强迫数据库使用索引

如何创建索引

CREATE INDEX name_index ON Employee (Employee_Name)

联合索引:CREATE INDEX name_index ON Employee (Employee_Name, Employee_Age)

使用索引的代价

占空间+影响数据库性能(索引的值要与数据库保持一致,所以只要对表做了增删改,在索引上也要来一遍)