如何高效使用mysql索引
发布时间:2022-02-11 16:53:07 所属栏目:MySql教程 来源:互联网
导读:这篇文章主要介绍了如何高效利用mysql索引,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 前言 mysql 相信大部分人都用过,索引肯定也是用过的,但是你知道如何创建恰当的索引吗?在
这篇文章主要介绍了如何高效利用mysql索引,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 前言 mysql 相信大部分人都用过,索引肯定也是用过的,但是你知道如何创建恰当的索引吗?在数据量小的时候,不合适的索引对性能并不会有太大的影响,但是当数据逐渐增大时,性能便会急剧的下降。 索引基础 我们都有都知道查字典的步骤,是先在索引页中找到这个字的页码,然后再到对应的页码中查看这个字的信息。mysql 的索引方法也是和这个类似的,先在索引中找到对应值,然后根据匹配的索引记录找到对应的数据行。假如有下面的 sql 语句: select * from student where code='2333' 加入 code 列上建立有索引,mysql 将使用该索引找到值为'2333'的数据行,然后读取数据行的所有数据返回。 索引类型 B-Tree 索引 (不是 B 减树,就是 B 树),绝大多数的索引类型都是 B-Tree 的(或者是 B-Tree 的变体),通常我们使用的也是这类索引。Mysql 中 MyISAM 存储引擎使用的是 B-tree,InnoDB 使用的是 B+Tree,B 树和 B+树的区别自行百度。 树结构的索引能够加快访问数据的速度,存储引擎不再需要全表扫描来获取所需的数据,取而代之的是从树的根节点来进行二分搜索,总所周知二分搜索的速度是相当快的,因此我们能够利用索引来极大的提高查询速度。B-Tree 支持以下几种类型的查询: 假设再 student 表中仅有:name,age,weight 这样一个多列索引,下面的查询都能利用到此索引 全值匹配 和索引列中的所有列进行匹配。比如查询name='abc' and age=12,这里用到了第一列和第二列 匹配最左前列 只是用索引的开头部分,比如查询name='ggg'只使用索引的第一列,查询name='ggg' and age=12是用索引的第一、二列。 匹配列前缀 也可以只匹配某一列的开头部分,比如查询name lik 'g%',查询 name 以 g 开头的记录。这里用到了第一列 匹配范围值 可用于匹配范围值,比如查询name > 'abc' and name < 'bcd' 精确匹配某一列并范围匹配另外一列 用于匹配多列,比如查询name='abc' and age > 12。 总的来看,可以发现 B-Tree 索引适用于根据最左前缀的查找,也就是查询字段字段顺序要和索引字段顺序一样,且以第一个索引字段开头。比如查询name,name and age,name and age and weight都能使用索引,但是查询age,age and name不能使用索引。 (编辑:上海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐