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

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

zonemu7小时前技术文章2

背景

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

搞优化的都知道,大部分时候,性能瓶颈都是在数据库,优化性能的都是做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,区别就在使用的是子查询。

相关文章

崩溃!3 道 React 面试必卡题,吃透稳过金九银十

凌晨三点还在对着 “React 组件为什么重复渲染” 抓耳挠腮?别慌!今天挑出 3 道让 90% 候选人卡壳的高频题,全是大厂面试官挖的 “坑”,手把手教你见招拆招,看完直接装进面试 “弹药库”!先问...

面试官:聊聊你知道的Vue与React的区别

最近面到很多大公司的时候,小编都会碰到一个很尴尬的问题,很多大公司的技术栈都是React,但是小编学的是Vue,其实从本质上来说两者都是比较优秀的前端框架,所以有些面试官会问到Vue和React的区别...

前端React面试基础系列(React基础篇)

本文阅读8分钟,喜欢的小伙伴可以持续关系小编哦1. 什么是受控组件和非受控组件?受控组件像表单元素在用户输入时,像<input> <select>等元素需要绑定一个 chang...

Python 实现 | 通过 Gitlab API 获取项目工程、分支、commit 提交记录

前提在 gitlab 中你的工程创建 Access Token然后你会得到一个 21 位 access token,代码中需要用到。代码''' 说明: 1.登录gitlab的r...

GIT最佳实践,高效提升多团队协同开发效率

多个团队共同维护同一个微服务模块时,经常出现A团队已发布的功能,B团队提交测发布出现冲突或缺失,如何有效解决多团队共同维护的问题呢?常用的版本管理工具有GIT、SVN,这两种版本管理工具,各有千秋;虽...

jenkins2.107+tomcat8+jdk1.8的安装和发布代码3种方式

jenkins2.107+tomcat8+jdk1.8的安装和发布代码3种方式如果对运维课程感兴趣,可以在b站上或csdn上搜索我的账号: 运维实战课程,可以关注我,学习更多免费的运维实战技术视频1....