作家
登录

万字干货总结:MySQL优化原理学习,这一篇就够了!

作者: 来源: 2017-12-07 16:08:07 阅读 我要评论

有时刻如不雅可以应用书签记录前次取数据的地位,那么下次就可以直接大年夜该书签记录的地位开端扫描,如许就可以避免应用 OFFSET,比如下面的萌芽:

  1. SELECT id FROM t LIMIT 10000, 10; 

改为:

  1. SELECT id FROM t WHERE id > 10000 LIMIT 10; 

其它优化的办法还包含应用预先计算的汇总表,或者接洽关系到一个冗余表,冗余表中只包含主键列和须要做排序的列。

MySQL 处理 UNION 的策略是先创建临时表,然后再把各个萌芽结不雅插入莅临时表中,最后再来做萌芽。是以很多优化策略在 UNION 萌芽中都没有办法很好的时刻。经常须要手动将 WHERE、LIMIT、ORDER BY 等字句 “下推” 到各个子萌芽中,以便优化器可以充分应用这些前提先优化。

如不雅这张表异常大年夜,那么这个萌芽最好改成下面的样子:

除非确切须要办事器去重,不然就必定要应用 UNION ALL,如不雅没有 ALL 关键字,MySQL 会给临时表加上 DISTINCT 选项,这会导致全部临时表的数据做独一性检查,如许做的价值异常高。当然即使应用 ALL 关键字,MySQL 老是将结不雅放入临时表,然后再读出,再返回给客户端。固然很多时刻没有这个须要,比如有时刻可以直接把每个子萌芽的结不雅返回给客户端。

结语

懂得萌芽是若何履行以及时光都消费在哪些处所,再加上一些优化过程的常识,可以赞助大年夜家更好的懂得 MySQL,懂得常见优化技能背后的道理。欲望本文中的道理、示例可以或许赞助大年夜家更好的将理论和实践接洽起来,更多的将理论常识应用到实践中。其他也没啥说的了,给大年夜家留两个思虑题吧,可以在脑袋里想想谜底,这也是大年夜家经常挂在嘴边的,但很少有人会思虑为什么?

  • 有异常多的法度榜样员在分享时都邑抛出如许一个不雅点:尽可能不要应用存储过程,存储过程异常不轻易保护,也会增长应用成本,应当把营业逻辑放到客户端。既然客户端都能干这些事,那为什么还要存储过程?
  • JOIN 本身也挺便利的,直接萌芽就好了,为什么还须要视图呢?

参考材料:

  • 姜承尧 著;MySQL 技巧内幕 - InnoDB 存储引擎;机械工业出版社,2013
  • Baron Scbwartz 等著;宁海元 周振兴等译;高机能 MySQL(第三版); 电子工业出版社, 2013
  • 由 B-/B + 树看 MySQL 索引构造:https://segmentfault.com/a/1190000004690721 

基于此,我们要知道并不是什么情况下萌芽缓存都邑进步体系机能,缓存和掉效都邑带来额外消费,只有当缓存带来的资本节约大年夜于其本身消费的资本时,才会给体系带来机能晋升。但要若何评估打开缓存是否可以或许带来机能晋升是一件异常艰苦的工作,也不在本文评论辩论典范畴内。如不雅体系确切存在一些机能问题,可以测验测验打开萌芽缓存,并在数据库设计上做一些优化,比如:

  • 用多个小表代替一个大年夜表,留意不要过度设计
  • 批量插入代替轮回单条插入
  • 合理控制缓存空间大年夜小,一般来说其大年夜小设置为几十兆比较合适
  • 可以经由过程 SQL_CACHE 和 SQL_NO_CACHE 来控制某个萌芽语句是否须要进行缓存

【编辑推荐】

  1. CentOS 7中安装Mysql 5.7的留意事项
  2. 关于MySQL的收集协定分析
  3. MySQL Authentication Failed的问题分析与解决对策
  4. 12 月全球数据库排名:PostgreSQL 稳步上升
  5. 双11超等工程—阿里巴巴数据库技巧架构演进
【义务编辑:庞桂玉 TEL:(010)68476606】

  推荐阅读

  教你玩转Hadoop分布式集群搭建,进击大数据

开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散 Hadoop的搭建有三种方法,单机版合适开辟调试;伪分布式版,合适模仿集群进修;完全分布式,临盆应用的模式。这篇文件介绍若何搭建完>>>详细阅读


本文标题:万字干货总结:MySQL优化原理学习,这一篇就够了!

地址:http://www.17bianji.com/lsqh/39574.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)