数据库之联合索引

##索引类型
####B-Tree索引
####Hash索引
---
两种索引对比

1. hash函数计算后的结果不是连续的,因此可以认为是随机存储在磁盘上。
2. 无法进行范围查询优化,也无法利用前缀优化,排序优化。
3. 必须回行,通过索引拿到数据的位置,回到表里去数据。


###B-Tree索引
**原理**:B+树是一种平衡树,建树时安从这至右的顺序建立搜索树,查找时也应该按照从左至右的顺序查找。这就是索引的最左匹配性质。

如果建立索引(a,b,c)

* Where a=3    是,只使用了a列
* Where a=3 and b=5   是,使用了a,b列
* Where a=3 and b=5 and c=4    是,使用了abc
* Where b=3  /  where c=4    否
* Where a=3 and c=4    a列能发挥索引,c不能
* Where a=3 and b>10 and c=7    A能利用,b能利用, C不能利用
* 同上,where a=3 and b like ‘xxxx%’ and c=7    A能用,B能用,C不能用

假设某个表有一个联合索引(c1,c2,c3,c4)一下——只能使用该联合索引的c1,c2,c3部分

* A where c1=x and c2=x and c4>x and c3=x 
* B where c1=x and c2=x and c4=x order by c3
* C where c1=x and c4= x group by c3,c2
* D where c1=x and c5=x order by c2,c3
* E where c1=x and c2=x and c5=? order by c2,c3

A:等价于c1=x and c2=x and c3=x  and c4>x 四个都能用上。

B:当order by ,group by中的字段出现在where条件中时,才会利用索引而不排序,更准确的说,order by 中的字段在执行计划中利用了索引时,不用排序操作。c3没有在where中,因此用了c1和c2.由于c1和c2,已经固定,所以c3已经是有序的了,该语句不用全表排序。

C:只用了C1。使用C3之前没有c2并不是固定的,因此需要全表排序。

D:只用了C1,但利用了c2和c3的索引,不用全表排序。

E:用了C1和c2,同样不用全表排序。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值