我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么进行MySQL性能优化中的索引优化

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么进行MySQL性能优化中的索引优化

本篇文章为大家展示了怎么进行MySQL性能优化中的索引优化,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

大家都知道索引对于数据访问的性能有非常关键的作用,都知道索引可以提高数据访问效率。

为什么索引能提高数据访问性能?他会不会有“副作用”?是不是索引创建越多,性能就越好?到底该如何设计索引,才能最大限度的发挥其效能?

这里主要是带着上面这几个问题来做一个简要的分析,同时排除了业务场景所带来的特殊性,请不要纠结业务场景的影响。

  • 索引为什么能提高数据访问性能?
    很多人只知道索引能够提高数据库的性能,但并不是特别了解其原理,其实我们可以用一个生活中的示例来理解。


    我们让一位不太懂计算机的朋友去图书馆确认一本叫做《MySQL性能调优与架构设计》的书是否在藏,这样对他说:“请帮我借一本计算机类的数据库书籍,是属于 MySQL 数据库范畴的,叫做《MySQL性能调优与架构设计》”。朋友会根据所属类别,前往存放“计算机”书籍区域的书架,然后再寻找“数据库”类存放位置,再找到一堆讲述“MySQL”的书籍,最后可能发现目标在藏(也可能已经借出不在书架上)。

    在这个过程中: “计算机”->“数据库”->“MySQL”->“在藏”->《MySQL性能调优与架构设计》其实就是一个“根据索引查找数据”的典型案例,“计算机”->“数据库”->“MySQL”->“在藏” 就是朋友查找书籍的索引。

    假设没有这个索引,那查找这本书的过程会变成怎样呢?朋友只能从图书馆入口一个书架一个书架的“遍历”,直到找到《MySQL性能调优与架构设计》这本书为止。如果幸运,可能在第一个书架就找到。但如果不幸呢,那就惨了,可能要将整个图书馆所有的书架都找一遍才能找到我们想要的这本书。

    注:这个例子中的“索引”是记录在朋友大脑中的,实际上,每个图书馆都会有一个非常全的实际存在的索引系统(大多位于入口显眼处),由很多个贴上了明显标签的小抽屉构成。这个索引系统中存放这非常齐全详尽的索引数据,标识出我们需要查找的“目标”在某个区域的某个书架上。而且每当有新的书籍入库,旧的书籍销毁以及书记信息修改,都需要对索引系统进行及时的修正。

下面我们通过上面这个生活中的小示例,来分析一下索引,看看能的出哪些结论?

  • 索引有哪些“副作用”?

    1. 图书的变更(增,删,改)都需要修订索引,索引存在额外的维护成本

    2. 查找翻阅索引系统需要消耗时间,索引存在额外的访问成本

    3. 这个索引系统需要一个地方来存放,索引存在额外的空间成本

  • 索引是不是越多越好?

    1. 如果我们的这个图书馆只是一个进出中转站,里面的新书进来后很快就会转发去其他图书馆而从这个馆藏中“清除”,那我们的索引就只会不断的修改,而很少会被用来查找图书
      所以,对于类似于这样的存在非常大更新量的数据,索引的维护成本会非常高,如果其检索需求很少,而且对检索效率并没有非常高的要求的时候,我们并不建议创建索引,或者是尽量减少索引。

    2. 如果我们的书籍量少到只有几本或者就只有一个书架,索引并不会带来什么作用,甚至可能还会浪费一些查找索引所花费的时间。
      所以,对于数据量极小到通过索引检索还不如直接遍历来得快的数据,也并不适合使用索引。

    3. 如果我们的图书馆只有一个10平方的面积,现在连放书架都已经非常拥挤,而且馆藏还在不断增加,我们还能考虑创建索引吗?
      所以,当我们连存储基础数据的空间都捉襟见肘的时候,我们也应该尽量减少低效或者是去除索引。

  • 索引该如何设计才高效?

    1. 如果我们仅仅只是这样告诉对方的:“帮我确认一本数据库类别的讲述 MySQL 的叫做《MySQL性能调优与架构设计》的书是否在藏”,结果又会如何呢?朋友只能一个大类区域一个大类区域的去寻找“数据库”类别,然后再找到 “MySQL”范畴,再看到我们所需是否在藏。由于我们少说了一个“计算机类”,朋友就必须到每一个大类去寻找。
      所以,我们应该尽量让查找条件尽可能多的在索引中,尽可能通过索引完成所有过滤,回表只是取出额外的数据字段。

    2. 如果我们是这样说的:“帮我确认一本讲述 MySQL 的数据库范畴的计算机丛书,叫做《MySQL性能调优与架构设计》,看是否在藏”。如果这位朋友并不知道计算机是一个大类,也不知道数据库属于计算机大类,那这位朋友就悲剧了。首先他得遍历每个类别确认“MySQL”存在于哪些类别中,然后从包含 “MySQL” 书籍中再看有哪些是“数据库”范畴的(有可能部分是讲述PHP或者其他开发语言的),然后再排除非计算机类的(虽然可能并没有必要),然后才能确认。
      所以,字段的顺序对组合索引效率有至关重要的作用,过滤效果越好的字段需要更靠前。

    3. 如果我们还有这样一个需求(虽然基本不可能):“帮我将图书馆中所有的计算机图书借来”。朋友如果通过索引来找,每次都到索引柜找到计算机书籍所在的区域,然后从书架上搬下一格(假设只能以一格为单位从书架上取下,类比数据库中以block/page为单位读取),取出第一本,然后再从索引柜找到计算机图书所在区域,再搬下一格,取出一本… 如此往复直至取完所有的书。如果他不通过索引来找又会怎样呢?他需要从地一个书架一直往后找,当找到计算机的书,搬下一格,取出所有计算机的书,再往后,直至所有书架全部看一遍。在这个过程中,如果计算机类书籍较多,通过索引来取所花费的时间很可能要大于直接遍历,因为不断往复的索引翻阅所消耗的时间会非常长。(延伸阅读:这里有一篇以前写的关于Oracle的文章,索引扫描还是全表扫描(Index Scan Or Full Table Scan))
      所以,当我们需要读取的数据量占整个数据量的比例较大抑或者说索引的过滤效果并不是太好的时候,使用索引并不一定优于全表扫描。

    4. 如果我们的朋友不知道“数据库”这个类别可以属于“计算机”这个大类,抑或者图书馆的索引系统中这两个类别属性并没有关联关系,又会怎样呢?也就是说,朋友得到的是2个独立的索引,一个是告知“计算机”这个大类所在的区域,一个是“数据库”这个小类所在的区域(很可能是多个区域),那么他只能二者选其一来搜索我的需求。即使朋友可以分别通过2个索引检索然后自己在脑中取交集再找,那这样的效率实际过程中也会比较低下。
      所以,在实际使用过程中,一次数据访问一般只能利用到1个索引,这一点在索引创建过程中一定要注意,不是说一条SQL语句中Where子句里面每个条件都有索引能对应上就可以了。

上述内容就是怎么进行MySQL性能优化中的索引优化,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么进行MySQL性能优化中的索引优化

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL性能优化,MySQL索引优化,order by优化,explain优化

今天我们来讲讲如何优化MySQL的性能,主要从索引方面优化。

Oracle怎么进行索引优化

Oracle进行索引优化主要通过以下几种方式来实现:使用合适的索引类型:Oracle支持多种类型的索引,包括B树索引、位图索引、函数索引等。根据查询的特点和数据的情况选择合适的索引类型能够提高查询性能。创建复合索引:如果查询中涉及多个列,可
Oracle怎么进行索引优化
2024-04-09

如何在 MySQL 开发中进行索引优化?(MySQL开发中的索引优化技巧)

在 MySQL 开发中,索引是提高查询性能的关键因素之一。合理地使用索引可以大大减少查询时间,提高数据库的响应速度。本文将介绍一些 MySQL 开发中的索引优化技巧,帮助你更好地利用索引来提升数据库的性能。
如何在 MySQL 开发中进行索引优化?(MySQL开发中的索引优化技巧)
2024-12-13

MySQL 性能优化技巧:索引设计与优化

本篇文章将详细介绍 MySQL 的索引设计与优化,帮助读者掌握索引的基本概念、设计原则和优化技巧。
MySQL索引2024-11-29

Cassandra中怎么进行性能优化

Cassandra 是一个高性能、分布式的 NoSQL 数据库,但是在处理大量数据时可能会遇到性能问题。以下是一些优化 Cassandra 性能的方法:数据模型设计优化:良好的数据模型设计是提高 Cassandra 性能的关键。使用合适的数
Cassandra中怎么进行性能优化
2024-04-09

mysql索引怎么优化

1. 使用合适的数据类型:选择合适的数据类型可以减小索引的大小,提高查询速度。例如,使用INT类型代替VARCHAR类型存储数字字段。2. 选择合适的索引列:在创建索引时,选择最常被查询的列作为索引列,可以提高查询速度。避免创建过多的索引,
mysql索引怎么优化
2024-02-29

Mysql性能优化之索引下推

索引下推(index condition pushdown )简称ICP,在Mysql5.6的版本上推出,用于优化查询。 在不使用ICP的情况下,在使用非主键索引(又叫普通索引或者二级索引)进行查询时,存储引擎通过索引检索到数据,然后返回给
2022-05-19

Couchbase中怎么进行性能调优和优化

Couchbase是一个高性能的NoSQL数据库,但是在特定情况下可能需要进行性能调优和优化。以下是一些常见的优化和调优方法:使用适当的硬件配置:确保服务器硬件能够支持负载和性能需求。可以考虑增加RAM、CPU和存储容量来提高性能。使用适当
Couchbase中怎么进行性能调优和优化
2024-03-08

Mysql性能优化:什么是索引下推?

导读本文章始发于本人公众号:码猿技术专栏,原创不易,谢谢关注推荐。索引下推(index condition pushdown )简称ICP,在Mysql5.6的版本上推出,用于优化查询。在不使用ICP的情况下,在使用非主键索引(又叫普通索引或者二级索引)进行查
Mysql性能优化:什么是索引下推?
2018-12-31

MySQL查询性能优化索引下推

目录前言1. 索引下推的作用2. 案例实践3. 索引下推配置4. 索引下推原理剖析5. 索引下推应用范围前言前面已经讲了mysql的其他查询性能优化方式,没看过可以去了解一下:MySQL查询性能优化七种方式索引潜水MySQL查询性能优
2022-08-16

编程热搜

目录