当前位置:首页 > 技术文章 > 正文内容

Mysql 查询语句优化,关键指标常见的几种类型你知道吗

zonemu2个月前 (08-03)技术文章23

背景

做开发的都知道, 大部分应用程序主要是读取数据,而写入数据的情况相对较少。

搞优化的都知道,大部分时候,性能瓶颈都是在数据库,优化性能的都是做SQL查询优化。

开发的最后一公里都是在做数据的优化,今天我们就来讲讲优化SQL的,怎么知道优化后的性能。

望闻听切

博大精深的中医在给人看病之前需要通过望闻听切来判断病人的病情,那么查看SQL的性能,我们则需要用EXPLAIN来分析查询语句的性能。

通过执行EXPLAIN,我们可以了解Mysql如何处理查询语句,包括如何使用索引、如何扫描行等。通过分析EXPLAIN结果中type类型,我们可以找出查询中的瓶颈,并进行针对性的优化。

过来

1 测试表结构如下,数据1000条

2 type 为null,性能最好,不需要访问表或者索引,直接得到结果。避免了对表的访问和索引的使用,减少了IO操作和数据传输的开销。

解释: 此SQL的目的是查询ID为null的数据,因为这个表设计的ID是为非空的主键,所以不 查询表就知道没有结果,所以此类型可以迅速判断,查询的结果就是没有记录。

生活也一样:太快拿到结果基本都是没有结果。

3 type = const/system ,通过主键查询,只有唯一的一条数据

4 type = eq_ref当EXPLAIN的type字段为eq_ref时,表示使用了等值连接,并且使用了一个索引来访问表中的数据。eq_ref通常用于连接两个表,并且连接条件是使用主键或唯一索引的列。

5 type = ref,使用非唯一性索引或者唯一索引的前缀扫描,返回匹配某个单独值的记录行


6 type = range ,索引范围扫描,常见于<、<=、>、>=、between等操作符

由于需要扫描索引的多个块,range操作通常比ref更慢。

7 type = index,索引全扫描,只遍历索引树

总结

常见的索引性能分析结果就是这几种,其他的复杂点的放到后面讲,包含以下几种:

fulltext: 全文索引访问,index_merge: 索引合并优化方法

unique_subquery: 类似于eq_ref,index_subquery: 类似于ref,区别就在使用的是子查询。

相关文章

7种超轻量级的Linux发行版,能够帮助你找到适合自己的操作系统

Linux是一种非常受欢迎的开源操作系统,而且有许多版本可以选择。有时候,你需要一种超轻量级的Linux发行版,它可以在资源有限的设备上运行,并且能够快速启动。本文将介绍7种超轻量级的Linux发行版...

java调用API操作GitLab(java调用zabbix api)

最近需要在一个WEB项目中集成GitLab,用到了GitLab的API操作,在网上找了很久都是说直接调用GitLab的Http接口,而且API官方只有javadoc没有其它说明文档,特别记录下,以备查...

Gitlab 的使用和代码审查流程介绍

1、先简洁介绍下项目常用的信息-面板统计页面2、用户信息面板3、服务器信息4、项目信息5、重点介绍代码提交审核机制和授权合并机制开发人员推送代码的时候不能直接推送到master,否则就会报错。此时开发...

高效使用 Vim 编辑器的 10 个技巧

在 Reverb,我们使用 MacVim 来标准化开发环境,使配对更容易,并提高效率。当我开始使用 Reverb 时,我以前从未使用过 Vim。我花了几个星期才开始感到舒服,但如果没有这样的提示,可能...

我的VIM配置(如何配置vim编辑环境)

写一篇关于VIM配置的文章,记录下自己的VIM配置,力求简洁实用。VIM的配置保存在文件~/.vimrc中(Windows下是C:\Users\yourname \_vimrc)。VIM除了自身可配置...

HTML5最新版本介绍(“html5”)

HTML5是HTML4.01和XHTML1.0之后超文本标记语言的最新版本,由一群自由思想者设计,最终实现了多媒体支持、交互性、更智能的表单和更好的语义标注。 HTML 5不只是 HTML规范的最新...