索引

索引分为聚集索引和非聚集索引,我们平时建表时用到的主键其实就是聚集索引,大部分的查询操作,最后都是通过聚集索引也就是主键才得到想要的数据的。

聚集索引

加了主键以后,整个表就按照主键形成了平衡树结构,其他信息都存储在叶结点。与不加主键相比,查询时间复杂度从O(n)变成了O(logn)

非聚集索引

非聚集索引也就是我们平时所说的常规索引,它的使用场景如下:
我们在查询时并不知道主键的值,而是通过其他字段形成的查询条件,而如果不通过主键查询,时间复杂度就会上升到O(n),所以这时候我们可以针对我们在查询条件中使用到的字段创建索引,这样就能大大加快查询速度。例如这条语句:

select age from students where name='张三'

我们就可以针对name字段创建索引:

create index name_index on students(name)

这样就能在索引中快速查询到对应的主键值,再用这个主键值去主表中查询我们需要的age字段。还有一种方法,可以省略这第二个步骤,直接在索引中查询出想要的值,也就是复合索引:

create index name_and_age_index on students(name,age)

这样就能直接在索引中查出想要的age数据,速度进一步加快
需要注意,使用复合索引时,要遵循最左前缀匹配原则,例如:

create index name_and_age_index on students(name,sex,age)

那么我们的查询条件必须要这么写:

where name=" " and sex=" " and age=" "where name=" " and sex=" "where name=" "

除以上三种写法之外,其他写法都会使索引失效。也就是如果有字段不在它正确的位置上,那么从它那一级开始,索引就失效了。可以这么理解,复合索引是一个递归的平衡树,在第一个字段的平衡树叶结点中存放着第二个字段的平衡树,所以必须按照固定顺序编写查询条件

需要注意的是,创建索引相当于新建了一张表,它会占用额外的存储空间。更重要的是,在对表进行更新、插入、删除操作时,需要同步对索引进行更改,所以虽然查询速度变快了,但更新、插入、删除操作的速度会受到一定影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值