Mysql索引如何优化

43次阅读
没有评论

共计 1366 个字符,预计需要花费 4 分钟才能阅读完成。

自动写代码机器人,免费开通

丸趣 TV 小编给大家分享一下 Mysql 索引如何优化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

编程沉思录                            Mysql 索引如何优化

B+Tree 的特点是,数据都存储在叶子节点,并且每个叶子节点的数据都是按相同顺序(升序或降序)排列存储的,再者相邻的叶子节点都用指针连接在一点,这种结构非常适合于范围查找。

B-Tree 索引能够显著加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取需要的数据,而是从索引的根节点逐层往下进行搜索,这大大缩小了存储引擎扫描数据的范围,因此对查询速度的提升非常明显。

2)Hash 索引

Hash 索引,顾名思义,就是通过哈希表实现的索引。其特点是只有精确匹配索引的所有列才有效。对于每一行数据,存储引擎都会对所有索引列计算一个哈希码,Hash 索引把哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针。

在 Mysql 中,目前只有 Memory 引擎显式支持 Hash 索引,而且由于 Hash 索引不支持范围查找,也不支持排序,更不支持部分索引列匹配查找,所以 Hash 索引用的比较少。

下文将着重介绍 B -Tree 索引的用法。

为了下文叙述方便,我们将假设有一个 user 表,其字段如下:

id:bigint 类型,主键

name:varchar 类型

age:int 类型

interest:varchar 类型

并且在 name、age、interest 上建立了一个联合索引 index_1,索引顺序为(name,age,interest),这个索引顺序非常重要,后文将会提及。

二、B-Tree 索引的用法

1)全值匹配

全值匹配指的是和索引中所有列进行匹配,如对上述 user 表查询 where name= aaa and age=20 and interest= 篮球 是可以使用到索引的所有列的。

2)匹配最左前缀

匹配最左前缀是指只使用到多列索引的左边若干列。如对上述 user 表查询 where name = aaa 是可以使用到索引的,并且只使用到索引的第一列。

3)匹配列前缀

匹配列前缀是指只匹配某一列的开头部分,如对上述 user 表查询 where name like aaa% 是可以使用到索引的,注意是匹配列的开头部分,如果查询的是 where name like %aaa 就不能使用到索引了。

4)匹配范围值

如对上述 user 表查询 where name aaa and name bbb 也是可以使用到索引的。

5)精确匹配某一列并范围匹配另外一列

如对上述 user 表查询 where name= aaa and age 10, 可以使用到索引,并且使用到索引的前 2 列。

三、B-Tree 索引的限制

1)如果不是按照索引的最左列开始查找,则无法使用索引。

如对上述 user 表查询 where age=20 则无法使用到索引,因为 age 不是索引列中的最左数据列。

2)不能跳过索引中的列。

如对上述 user 表查询 where name= aaa and interest= 足球,则只能使用到索引的第一列,因为 where 条件中没有包含 age 这一列。

以上是“Mysql 索引如何优化”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-16发表,共计1366字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)