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
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索引如何优化”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注开发云行业资讯频道!

相关推荐: MySQL数据库的使用规范

这篇文章给大家分享的是有关MySQL数据库的使用规范的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。一个平台或系统随着时间的推移和用户量的增多,数据库操作往往会变慢;而在Java应用开发中数据库更是尤为重要,绝大多数情况下数据库的性能…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/12 20:56
下一篇 06/12 20:56

相关推荐