Explain查询Sql效率

news/2025/3/20 15:32:10/文章来源:https://www.cnblogs.com/Mosey/p/18783166

Explain分析Sql性能

前言

在我们平时开发中,因为系统可能属于初级阶段,数据库的数据还不是很多,所以自我感觉写的Sql语句上运行起来速度还不错,殊不知,随着时间推移,数据量日益增多,系统的查询效率会在打折扣,所以,Sql性能调优手段还得了解一下下。

Explain是什么?有什么用?

Explain可以用来分析一条Sql语句的运行效率。根据执行后的结果字段来判断查询有没有用“索引”、“全表扫描还是只扫描一些行”、“当前sql处于哪个性能级别”等等。

Explain怎么用?

用法:explain 待分析的Sql语句

Explain返回字段了解一下

!> id

id越大,越先执行(单表Sql除外),id相同,则执行顺序由上而下

!> select_type(查询类型)

!> table

Sql查询对应的数据库表名称

!> type(联接类型)

  • 可根据type知道sql的性能级别,all性能最差(全表扫描),

  • 我们平时开发写的Sql至少达到range性能级别,最好能达到ref,不然有可能出现性能问题

!> 性能级别天梯如下
> system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > all

!> possible_keys

查询时,可能用到的索引

!> key

查询时,真正用到的索引

!> key_len

可片面理解为索引长度,不过不是真正的长度,Sql自有一套计算长度规则

!> rows

扫描了多少行。

!> extra(额外信息)

是否使用索引 ,是否使用where,是否使用distinct等待
性能级别:useing index>usinh where > using temporary | using filesort

实战小例子

!> 没加索引前

cRzilD.png

!> 在t_erchang_sanjian_user表的user_name字段加了索引后

cWSVvF.png

!> 又在t_erchang_sanjian_photo表中的create_by字段加了索引后

cW9Z79.png

写Sql时要注意点什么

  • where后面的字段的值要加单引号‘’不然如果该字段有索引,则索引失效

  • join连接多表(两到三个表最优)查询时,每个表设置别名,字段也用别名.字段表示

  • 有大量重复数据的字段不适合创建索引,如性别(男,女),是否删除(0,1)这类型字段。

  • 虽然索引能加快查询速度,但是建议单表最多设置5个索引,因为索引太多会影响插入和更新速度

  • 避免同时修改或删除大量数据,这样会造成cpu飙升,从而影响别人对数据库的访问

  • 删除重复索引,如果字段A和B创建了组合索引,那么就不必要单独为A再创建新的索引了(index_A_B相当于创建了A,AB索引,即最左匹配原则)。

  • 如果要插入大量数据,建议分批插入

  • 建议在where和order by涉及的列上建立组合索引

  • 连接查询相关:

    • Inner join 只保留两张表中完全匹配的结果集

    • left join 返回左表所有的行,即使在右表中没有匹配的记录。

    • right join 返回右表所有的行,即使在左表中没有匹配的记录。

  • 避免在索引列上使用mysql的内置函数,如(时间类函数等)

  • 不寻底常用select *,应该要明确要查的具体字段

  • 平时开发中,可日志打印一下完整sql放到数据库客户端运行一下排错

  • 存储引擎中

    • MyISAM支持表级锁,不支持事务和全文索引

    • InnoDB支持行级锁、支持事务安全(ACID兼容)、支持外键

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/902043.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

部署mall项目遇到的问题和解决方案

部署mall项目爬坑日记 原作者项目 环境:ubuntu20 docker容器相关的坑 发现容器打印的日志和当前时间有出入,相差了8小时,后面得知容器和宿主机的时区不同导致 !> 解决办法有如下几种:1.在刚开始创建容器的时候,docker run后面加上-v /etc/localtime:/etc/localtime:ro2…

高并发下如何保证幂等性

好文章怕丢失?码起来! 本文转载自原文 高并发下如何保证接口的幂等性? 接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题。本文分享了一些解决这类问题非常实用的办法,绝大部分内容我在项目中实践过的,给有需要的小伙伴一个参考。 不知道你有没有遇到过这些场…

考OCP认证要交哪些费用?

考OCP认证要交哪些费用? 考OCP认证,指的是Oracle数据库管理员中级认证 Oracle Certified Professional,这是Oracle非常有名的一个认证,对于个人帮助巨大。 OCP认证要交不少钱,些费用因考试版本、培训机构和地区差异而有所不同,以下是综合各渠道信息后的费用说明: 1. 考…

JDK 24 发布,新特性解读!

真快啊!Java 24 这两天已经正式发布啦!这是自 Java 21 以来的第三个非长期支持版本,和 Java 22、Java 23一样。 下一个长期支持版是 Java 25,预计今年 9 月份发布。 Java 24 带来的新特性还是蛮多的,一共 24 个。Java 23 和 Java 23 都只有 12 个,Java 24的新特性相当于这…

解锁实时跌倒检测Jetson Nano与定制的YOLOv8

1. 概述 跌倒是一个重大问题,特别是对老年人和有疾病的人来说,因为它们可能导致严重伤害甚至死亡。坠落探测系统旨在迅速识别此类事件,确保及时提供援助并减少造成严重后果的风险。随着人工智能和机器学习的进步,跌倒检测变得更加准确和可靠。在我之前的博客中,“开始使用…

请求接口,接口响应中带回cookie,再请求其他接口后,cookie没有自动带入

最近做的项目,登陆时内部的登录,做个跳转,在那边登陆后会回跳到本地页面 本地联调接口,回调地址一直是提示跨域,然后再访问其他的接口提示401,未认证状态 从这个大哥中看到的问题,感谢 http://www.janron.net/details/8-computerLanguage-2326-488首先确定后端的接口resp…

Glyphs制作tff字体子集

官网 https://glyphsapp.com/zh 导出字体的子集 开发过程中整个字体文件太大,需要制作部分字体的子集合。 双击tff文件打开字体文件选择要保留的字符 •进入字体编辑窗口后,你会看到所有字符的网格。 •按住 Cmd 键并点击你想要保留的字符。 例如:大小写字母、数字、特殊符号…

开启MySQL8的密码策略组件validate_password.250320

一、validate_password组件安装配置安装组件INSTALL COMPONENT file://component_validate_password;安装后,密码策略立即生效,但仅影响后续操作(如新建用户或修改密码)。卸载组件UNINSTALL COMPONENT file://component_validate_password;卸载后,密码复杂度策略失效,可设…

茶聚场日事清实战案例:OKR目标管理+流程优化+看板会议系统深度应用

茶聚场通过引入日事清管理系统,有效解决了OKR不透明、跨区域协作低效及供应链管理分散等挑战,实现了目标对齐、流程优化与运营效率提升,支撑其在新茶饮市场的战略扩张。公司介绍 在2016年,一个新的品牌诞生在北京的商业心脏地带——茶聚场。作为茶聚场(北京)餐饮管理有限…

20250320日

01.军工 02.纳指etf 03.煤炭:04.红利etf 05.养殖ETF:06.白酒:

勤策、玄瞳、纷享销客对比,消费品领域CRM厂商怎么选?

近年来,随着消费品行业竞争加剧,CRM(客户关系管理)系统已成为企业提升运营效率、增强客户满意度的关键工具。其中,纷享销客、勤策、玄瞳等作为该领域的佼佼者,各自拥有独特的产品特点和适用企业类型。本文将此前三家主流快消领域CRM厂商进行全面对比,帮您理清各家厂商“…

Deepseek本地部署的webui可视化

1.WebUI可视化插件 —— Page Assist 在chrome应用商店中搜索Page Assist,找到后添加到chrome 浏览器添加完成后类似这样 点击这个扩展插件,即可看到 就可以进行对话聊天了