什么是数据库索引?
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。
简单来说,索引就是一种排序的数据结构,数据库中的数据无序,但是这种结构是有序的,这种有序的结构指向数据库中的数据,使得数据在逻辑上是有序的(但是实际的存储仍然是无序的)。
利用这种逻辑上的有序性,可以更快的进行查询,否则必须进行全表扫描。
全表扫描的时间复杂度是O(n),这是一个看起来还不错的复杂度。然而数据库中的数据往往是存储在外存储器上的,并且这些数据也无法一次性全部调入内存,那么如果全表扫描必然出现多次的访问外存操作,这是一个极度耗时的操作,把这些数据调入内存所花费的时间甚至比在内存中扫描这些数据花费的时间多得多。这使得O(n)复杂度的时间规模在这里已经不适用了!!!
利用索引这种有序结构不仅可以减少比较次数(不再是全表扫描),而且还可以减少访问外存的次数,这样一来,时间大大缩短。
下面来做试验。
现在有一张信息表user,表结构为:
name,id,age,position
其中name代表用户名字,id代表用户账户,age代表用户年龄,position代表用户职位。
这张表有100000条数据。
现在我们不加索引查询年龄为30岁的人数。
结果:
select count(*) from user where age = 32
受影响的行: 0
时