数据库索引优化(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
    评论
索引优化数据库性能优化的重要部分,可以大幅提高查询效率。索引是一种数据结构,用于加速对表中数据的查找和排序。在查询中使用索引可以避免全表扫描,提高查询速度。以下是索引优化的一些技巧: 1. 确定索引类型 MySQL 支持多种索引类型,包括 B-Tree 索引Hash 索引、Full-Text 索引等。不同的索引类型适用于不同的场景。例如,B-Tree 索引适用于范围查询,而 Hash 索引适用于等值查询。因此,在创建索引时,需要根据实际情况选择合适的索引类型。 2. 确定索引字段 索引字段是指在哪些字段上创建索引。一般来说,需要在经常用于查询的字段上创建索引。但是,创建太多的索引也会影响性能,因为每个索引都需要占用存储空间,而且在插入、更新和删除数据时也会增加额外的开销。因此,需要权衡索引的数量和存储空间的使用。 3. 索引覆盖查询 索引覆盖查询是指查询结果可以从索引中直接获取,而不需要再访问数据表。这样可以避免访问数据表的开销,提高查询效率。要实现索引覆盖查询,需要在查询语句中包含索引字段,并且查询语句只查询索引字段。 4. 索引列的顺序 在创建索引时,需要注意索引列的顺序。一般来说,应该把区分度高的列放在前面。区分度是指该列中不同值的数量与总行数之比。区分度越高,表示该列的值越能区分不同的行,因此放在前面可以提高索引效率。 5. 索引的长度 索引的长度是指索引列中的字符数或字节数。索引的长度对查询效率有影响,因为索引长度越长,索引树的高度越高,查询时需要访问的磁盘块数也就越多。因此,需要根据实际情况选择合适的索引长度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

时空恋旅人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值