数据库索引优化(Betree索引和Hash索引)

当表中的数据不多的时候,查询的频率比较低的情况下索引的作用还不是太明显,因为这个时候表中的数据差不多会完全缓存到内存中,所以就算是进行全表扫描也不会太慢。但是当数据量太大,内存不能完全缓存所有数据的时候,所以的作用就会显得越来越重要。

Mysql 所支持的索引类型,索引的是在mysql的存储引擎层实现的  不是在mysql服务器层实现的,所以,不用的存储引擎支持不同的索引。

1.B-tree是常见的索引实现,通常都是b+tree来实现,他的特点:

1.它是一种平衡的查找树,

2.每一个叶子到根部的距离都是相同的

3.所有的数据都是按照键值的大小来顺序存放的

4.各个叶子节点通过指针来进行链接,这样可以加快查找的效率。

2.什么情况下适合使用B树索引:

 对于第一条的解释,在order_sn字段上建立B树索引,那么这样全职匹配的时候就可以走到索引

第二条,如果建立联合索引(order_sn,create_date),只要联合索引的第一列符合查询条件,这个索引就会被用到,联合索引的第二列符合条件,这样是无法走到这个索引的。这就叫最左匹配前缀的一种查询.

点三条这样的模糊查询,也可以利用到第二条建立的那个联合索引。注意必须是order_sn列开头的索引。

 根据b-tree的特点,他更适合范围查找

第二条 如果是联合索引,他可以精确的匹配左前列,并且范围匹配另外一列,例如:order_sn=12212 and create_date>'2021-5-10'

第三条可以用在只访问索引的查询上,这种成为覆盖索引

B树索引除了使用在查询过滤之外呢,还可以使用在order by中,可以只用这种方式来查找到值,同样也可以使用这种方式来排序。

3.B树索引的使用限制:

  如果索引命中数据库中的大部分数据时,mysql的优化器会认为可能走全表扫描的效果更好,所以就不会使用索引的方式来进行查询。

假如我们创建了一个索引(A,B,C)相当于创建了三个索引:(A),(A,B),(A,B,C)三个索引。

第一最左匹配规则的解释,如select * from test where B = '1' and A = '2'; 相当于select * from test where  A = '2'  and  B = '1';会走索引(A,B)

第二条的解释,如果查询条件where A = '1' and C = '3';在这当中,只有 A 能使用索引,C 不能使用索引。只会走索引(A)

第三条好理解

第四条,。例如:where A = 'name' and B like 'name%' and C = 'name'; 这里只有 A,B 能使用索引,C不能使用索引。

补充一条:MySQL 能在索引中做最左前缀匹配的 like 比较,但是如果是通配符开头的 like 比较,就不能使用索引。例如:like 'name%' 可以使用索引,like '%name' 则不能使用索引。

4.Hash索引

Hash索引的限制:

5.为什么使用索引

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时空恋旅人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值