【MySQL详解】查询语句优化思路和具体步骤

前言

​ 虽然MySQL有着低廉的成本、出色的性能,但如今互联网应用流量不断疯涨,应用不仅要支持高可用,还要支持高并发,而MySQL却是高并发路上的拦路虎,为了保证数据持久化刷盘,降低了执行效率,所以MySQL调优尤为重要。但大多数应用读多于写,往往查询操作更容易出问题,而且还是一些复杂的操作,所以本文主要讲述对查询语句优化的思路和步骤。

​ 苦于在网上没有找到一篇MySQL具体优化的思路和步骤,大多数是一些笼统的优化步骤。比如用show status查看数据库的增删改查执行统计,慢查询日志定位执行效率低的语句、show profile显示语句每个步骤所消耗的时间、通过trace分析优化器如何选择执行计划、如何分析explain执行计划等等。但对于SQL优化经验不足的开发者来说,这些概念都太笼统了,很容易陷入误区,包括我之前看完《高性能MySQL》后,认为调优思路就是上面所讲的优化步骤。但当我需要调优的语句时,我一脸疑惑,不知道如何下手调优?那么为了解开这个疑惑,根据以往优化经验和总结前人的思路,整理了查询语句优化的思路和具体步骤。但因为在实际开发中,会遇到千奇百怪或复杂的语句,所以这个思路也不一定都适用。


 【JVM详解】多图详解JVM运行流程及内存区域

前言

前提扼要:我认为快速学习新知识的办法是,将知识点信息转成生动形象的图来加深理解。其次是采用费曼学习法,用自己理解的话教会其他人。所以文章都会尽量采用图片讲解,在末尾处用问答的方式,将本文知识点整合,尽量保证问答之间连续性和逻辑性。

​ Java虚拟机是Java语言的一大特点,也为Java提供了跨语言的特性,一次编译,多次运行。避免底层技术的复杂性和不同系统带来的差异性的影响,所以虚拟机有自己一套内存区域管理,区别于系统的内存。另外一大特性是回收对象,也就是我们常说的垃圾回收器。如今很多应用对程序的性能、稳定性和扩展性方面会有了极高的要求,如果开发人员不了解虚拟机诸多技术特性的运行原理,就无法写出最适合虚拟机运行和自优化的代码。这也是我们学习虚拟机的原因,知其然而知其所以然。那虚拟机是如何将Java文件执行输出结果的呢?Java内存区域长啥样?垃圾回收器是如何回收对象的呢?接下来我会一一来解答,按照惯例,画一张Java虚拟机结构流程图。如下图:


 【MySQL详解】MySQL架构之SQL语句执行的全过程

前言

了解MySQL服务器执行一条SQL语句全过程,必须先了解MySQL体系架构,每个部分有哪些组件、具体功能和作用。为了讲解连贯性,会根据客户端与服务器建立连接,发送语句到返回数据的过程讲解。如果对某个部分的组件不太了解,不要慌,先记住功能作用,我会专门对复杂的组件再开多一篇文章来讲解,到时候带着目的去看,更容易理解。记住,不懂不熟悉的组件不要慌。本文默认只考虑InnoDB存储引擎。


 【MySQL详解】查询优化器是如何工作的

前言

查询优化器是专门负责优化查询语句的优化器模块,还可以通过分析各种统计信息,基于成本考虑给出最优的查询计划,explain是查询优化器分析出来的结果,通常我们在优化语句时都会查看explain具体查询细节。

MySQL的优化器主要是将SQL经过语法解析/词法解析后得到的语法树,通过MySQL的数据字典和统计信息的内容,经过一系列运算,从而得出一个执行计划树的构成。之后MySQL按照执行树的要求,计算得出结果。也就是说优化器的输入是一个语法树,输出是一个执行树(也称为执行计划)

由上可知,查询优化器分别基于规则对语句优化,另一个是基于成本优化查询方法。那本文将会对基于成本优化进行讲解,首先我们得知道什么是成本,查询中有哪些成本?


 【Redis详解】实际应用场景之缓存和分布式锁-(四)

本文的内容主要介绍redis实际开发中的应用,内容如下:

  • 首先讲一下最常见的应用-缓存,redis基于内存之上,读取速度快,所以大部分应用会把redis当作缓存,缓冲热点数据。其次会讲redis缓存在运行时,产生的一些问题。
  • 然后是redis实现分布式锁的具体方案。

 【Redis详解】主从复制-哨兵-集群-(三)

本文的主要内容,在集群模式中涉及的功能,但不会讲解每个功能详细操作命令:

  • 复制
  • Sentinel哨兵
  • 集群模式

 【Redis详解】单机数据库功能实现-(二)

话不多说,直接上本文的主要内容,单机数据库中六大功能的实现:

  • 过期键删除策略
  • 持久化
  • 内存淘汰机制
  • 事件
  • 客户端服务器

 【Redis详解】底层数据结构-(一)

话不多说,直接上本文的主要内容:

  • 首先介绍六种基础数据结构:动态字符串,链表,字典,跳跃表,整数集合和压缩列表,以及两种高级数据结构位图(BitMap)、HyperLogLog。
  • 其次会介绍Redis的数据类型对象:字符串对象(String)、列表对象(List)、哈希对象(Hash)、集合对象(Set)和有序集合对象(ZSet),以及高级数据类型布隆过滤器(BloomFilter)
  • 最后以问答形式,分析数据类型对象对应的应用场景。


 【Redis详解】Redis系列目录

首先讲一下为什么想写Redis详解这一些系列的文章。因为在互联网应用中,缓存成为高并发架构的关键组件。想用费曼学习法加深对Redis理解和巩固,所以在输出内容的同时,尝试教会别人是一种能够快速掌握知识的方法。

系列目录


 【多图预警!】HashMap原理和主要流程详解

1.前言

HashMap是开发中最常用的键值对集合类,也是面试中经常被问及的一个知识点,也是衡量java基础是否扎实的标准之一,是每个JAVA初学者入门必须跨过的槛。所以HashMap重要性不言而喻,需要彻底掌握。 但在开始学习HashMap时,如果文章中有一大堆源码和一大段文字,会让读者阅读起来十分枯燥以及苦涩难懂。特别是不太了解HashMap的读者,但为了深入理解肯定要结合源码学习。 所以打算先介绍HashMap流程,熟悉主要操作的流程步骤,再结合源码,加深对HashMap的理解。分为两篇文章讲解:
第一篇(本文)是介绍HashMap主要操作的流程。
第二篇是结合源码深入理解。
本文为第一篇文章,尽量以简短的文字+图片讲解HashMap,力求达到通俗易懂,也会叠加一小部分代码,方便第二篇文章源码阅读。


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×