数据库之为什么建立索引

假设我们有一个学生成绩信息表 student:

student_name   student_score   ···

    ···            ···         ···

我们要从这个表中查找到名字为xiaoma的学生成绩信息,我们需要用这样的语句:

select * from student
            where student_name = 'xiaoma'
在没有建立索引的情况下:

数据库不得不查询student表的每一行的每一列,并确定学生名称是否为xiaoma,这就意味着数据库不得不检索相当大的数据量才能查找成功。

这就是全盘扫描。

1、什么是索引?

一个索引是存储的表中一个特定列的值得数据结构。索引是在表的列上创建。所以,索引包含一个表中列的值,并且这些值存储在一个数据结构中。

索引是一种数据结构。

2、通常可以作为索引的数据结构有哪些?

(1)B-Tree

(2) 哈希表:哈系索引的工作方式是将列的值作为索引的键值(key),和键值相对应实际的值(value)是指向该表中相应行的指针。

3、索引的工作原理:

因为索引基本上是用来存储列值的数据结构,这使查找这些列值更加迅速。如果索引使用最常用

的数据结构 B-Tree,那么其中的数据是有序的。有序的列值可以极大的提升性能。

假设我们在student_name这一列上建立索引。这样我们在查找student_name=xiaoma,不用再扫描全表。因为索引已经按照字母顺序排序,只需查找所有首字母为“x”的列。

这样的查询次数最大为:

(所有首字母为“x”的索引项被存储在一个内存块中)

查询这个内存块所需的次数 + 遍历内存块中所有项所需的次数。

相比较全盘扫描,速度大大加快。

简单的说,索引就是以表中的某一列作为,列值所在
行的唯一标识,进行排序。方便快速查找。
更加形象的说,索引是整张表的目录。

4、在数据库中,索引存储了些什么?

索引存储了,创建索引的表上那一列的值,以及指向
表中相应行的指针。指针指向行所在的位置。

5、当我们设置索引后,一定会使用索引进行查找吗?

不一定,在执行sql语句:

select * from student
            where student_name = 'xiaoma

数据库会检查在查询的列上是否有索引。假设student_name列上确实创建了索引,数据库会接着检查使用这个索引做查询是否合理。因为有些场景下,使用索引比起全表扫描会更加低效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值