原文地址: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)
使用索引的代价
占空间+影响数据库性能(索引的值要与数据库保持一致,所以只要对表做了增删改,在索引上也要来一遍)