如何进行sql优化?

在日常工作中都避免不了要和各种SQL语句打交道,无论是开发还是后期维护,一条执行效率高的SQL语句都会对系统性能产生巨大影响。那么,如何进行有效的SQL优化呢?下面将为大家深入浅出地讲解SQL优化的各个方面:

1、了解数据表和查询的基础

在进行SQL优化之前,你得先了解你的数据表以及你的查询。掌握表中数据的类型、分布和大小。这个过程包括:

  • 分析表结构:查看表的索引、字段类型等,确保其符合最佳实践。
  • 理解数据特性:了解数据的分布特性,哪些字段经常被查询,哪些字段数据量较大等。

假设我现在的表结构如下

CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,email VARCHAR(100),created_at DATETIME,last_login DATETIME
);

2、使用EXPLAIN分析执行计划

MySQL的EXPLAIN命令是优化查询的重要工具。它可以显示MySQL如何执行SQL查询,包括它是如何使用索引的,以及它是如何join表的。

explain  select * from users where username = 'mntalk';

通过分析EXPLAIN的结果,可以了解SQL执行的瓶颈在哪里,是否选择了合适的索引。

&nbsp

3、优化查询语句

**避免SELECT ***

使用SELECT *会返回表中的所有列,这通常比需要的要多。你应始终只查询需要的列。

-- 不推荐
SELECT * FROM users WHERE username = 'mntalk';-- 推荐
SELECT username, email FROM users WHERE username = 'mntalk';
使用索引

确保对经常查询的列创建索引。但请注意,不是每个列都应该建立索引,因为索引本身也有维护成本。

使用主键索引与不使用索引查询对比
&nbsp

-- 创建索引
CREATE INDEX idx_username ON users(username);
CREATE INDEX idx_email ON users(email);-- 使用索引的查询
SELECT username, email FROM users WHERE username = 'mntalk';

在username和email上创建索引后,查询
使用索引前:
&nbsp

使用索索引之后
&nbsp

避免在WHERE子句中使用函数或者计算

当你在WHERE子句中使用函数或者其他计算时,MySQL通常不能使用索引。

-- 不推荐
SELECT username, email FROM users WHERE MONTH(last_login) = MONTH(CURRENT_DATE()) AND YEAR(last_login) = YEAR(CURRENT_DATE());-- 推荐
SELECT username, email FROM users WHERE last_login >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH);

4、优化表结构

使用合适的数据类型

选择最合理的数据类型可以节省空间,并提高查询效率。

-- 不推荐
ALTER TABLE users MODIFY username VARCHAR(255);-- 推荐
ALTER TABLE users MODIFY username VARCHAR(50);
规范化与反规范化

规范化可以减少数据冗余,但是可能会增加查询的复杂度。反规范化可能会增加数据冗余,但是可以简化查询。

5、查询缓存

确保合理使用查询缓存,虽然在MySQL 8.0中已经移除了查询缓存的功能,但在之前版本中,它可以通过缓存查询结果来减少服务器的负载。

6、使用批量操作

当你需要插入大量数据时,尽量使用批量操作而不是单条插入。

-- 不推荐
INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com');
INSERT INTO users (username, email) VALUES ('jane_doe', 'jane@example.com');-- 推荐
INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com'), ('jane_doe', 'jane@example.com');

7、避免大事务操作

大事务会占用更多的锁资源,也会导致锁等待的时间增加。

8、分析和优化JOIN

使用JOIN时,应当注意顺序和条件。小表驱动大表通常会有更好的性能。

9、归档旧数据

对于历史数据,定期归档可以帮助维护表的大小,提高查询效率。

10、监控和日志

监控数据库的性能,记录慢查询日志,这有助于发现潜在的性能问题。

通过上面的介绍,我们可以明白,SQL优化是一个涉及多个层面的过程,需要我们不断学习和实践。每一条建议都可能对你的系统产生重大影响,所以建议大家在更改之前,都要进行充分的测试。

最后说一句(求关注,求赞,别白嫖我)

最近无意间获得一份阿里大佬写的刷题笔记和面经,一下子打通了我的任督二脉,进大厂原来没那么难。

这是大佬写的, 7701页的阿里大佬写的刷题笔记,让我offer拿到手软

求一键三连:点赞、分享、收藏

点赞对我真的非常重要!在线求赞,加个关注我会非常感激!@小郑说编程

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

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

相关文章

社科院与美国杜兰大学金融管理硕士项目——勇当开路先锋,争做事业闯将

随着金融行业的不断发展,在职金融人员面临着越来越多的机遇和挑战。在这个充满变革的时代,金融人员需要具备开拓进取的精神,勇当开路先锋,争做事业闯将。只有这样,才能在激烈的竞争中立于不败之地,为企业创…

算法32:针对算法31货币问题进行扩展,并对从左往右模型进行总结

本算法是在算法31的基础之上进行推理总结的,因此,在看本章之前,必须先去了解算法31,否则会觉得莫名其妙。 算法31的推理过程: 如果 x y1 y2 y3 y4 y5 y6. x1 y2 y3 y4 y5 y6 那么 x y1 x1. 根据以…

Codeforces Round 911 C. Anji‘s Binary Tree

原题: C. Anji’s Binary Tree time limit per test 2.5 seconds memory limit per test 256 megabytes input standard input output standard output Keksic keeps getting left on seen by Anji. Through a mutual friend, he’s figured out that Anji really …

ECharts 图表简单示例,中国地图

目录 ECharts官网链接: [ECharts](https://echarts.apache.org/zh/index.html)在项目中引入 Apache ECharts柱状图折线图饼图仪表盘中国地图完整示例代码 ECharts官网链接: ECharts 在项目中引入 Apache ECharts <!DOCTYPE html> <html><head><meta char…

JavaWeb——后端AOP面向特定方法编程

七、AOP 1. 概述 AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff1a;面向切面编程、面向方法编程&#xff0c;其实就是面向特定方法编程 场景&#xff1a; 案例部分功能运行较慢&#xff0c;定位执行耗时较长的业务方法&#xff0c;此时需要统计每个业务…

2024年数学建模美赛能用chatGPT之类的AI吗?官方给了明确规定!

这两年chatGPT等大语言模型火了&#xff0c;能对话&#xff0c;自然也能回答数学建模方面的问题。 那美赛能不能用这些AI呢&#xff1f;2024年美赛官方对chatGPT等的使用做出了明确的规定&#xff08;其中的VI. Contest Instructions部分&#xff09;&#xff1a; https://ww…

JavaScript高级程序设计读书记录(六):定型数组,Map

1. 定型数组 定型数组&#xff08;typed array&#xff09;是 ECMAScript 新增的结构&#xff0c;目的是提升向原生库传输数据的效率。实际上&#xff0c;JavaScript 并没有“TypedArray”类型&#xff0c;它所指的其实是一种特殊的包含数值类型的数组。 1.1 历史 随着浏览器…

LaTex引用字体变色

使用下面这条语句进行修改。 ‘citecolor’改变参考文献颜色&#xff0c; ‘linkcolor’改变图标公式引用的颜色&#xff0c; ‘urlcolor’ 文本网站超链接颜色。 \usepackage[colorlinks,bookmarksopen,bookmarksnumbered,citecolorblue, linkcolorblue, urlcolorblue]{hyper…

杨中科 ASP.NET Core前后端分离开发

一、 前后端分离 1、传统MVC开发模式: 前后端的代码被放到同一个项目中&#xff0c;前端人员负责编写页面的模板&#xff0c;而后端开发人员负责编写控制器和模型的代码并且“套模板”。 缺点: 互相依赖&#xff0c;耦合性强&#xff0c;责任划分不清。 2、主流的“前后端分离…

【openGauss服务器端工具的使用】

【openGauss服务器端工具的使用】 gs_checkperf openGauss 不仅提供了gs_checkperf工具来帮助用户了解openGauss的负载情况。 使用数据库安装用户登录服务器&#xff0c;执行如下命令进行查看数据库性能&#xff1a; 简要信息展示&#xff1a;[ommopengauss03 ~]$ gs_checkperf…

跨平台的传输协议@WebDav协议@windows系统配置WedDav服务器@局域网内的WebDav传输系统

文章目录 WebDav协议基本信息启用必要的windows功能启动站点管理器IIS站点根目录访问权限设置站点的功能设置端口通行防火墙IMME文件类型(文件后缀)其他设备登录和访问本机的WebDav服务站点 小结优点缺点 refs WebDav 协议基本信息 来自wikipedia:基于Web的分布式编写和版本控…

协程池与新脚本语言

今天的主人公名为——Melang。 这是一款使用C语言开发的“新”的脚本语言&#xff0c;然而其已经默默问世了6年之久。 下面笔者就带你走进Melang world。 What is Melang Melang是一款协程并发脚本语言。它是一款解释型&#xff0c;而非编译型语言。 在Melang中&#xff…

Tmux 使用小记

本文参考自 阮一峰老师Tmux 使用教程[1] Tmux,不仅仅是分屏那么简单。。。 与tmux类似的工具是screen 会话管理 将窗口与会话"解绑" 对于没有图形界面只有shell的场景(如服务器)&#xff0c;尤其有用..这是其最核心解决的问题(窗口管理啥的只能算锦上添花的辅助功能)…

代码随想录算法训练营第20天 | 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

目录 654.最大二叉树 &#x1f4a1;解题思路 &#x1f4bb;实现代码 617.合并二叉树 &#x1f4a1;解题思路 递归 &#x1f4bb;实现代码 700.二叉搜索树中的搜索 &#x1f4a1;解题思路 递归法 迭代法 &#x1f4bb;实现代码 98.验证二叉搜索树 &#x1f4a1;解题…

pod进阶版(1)

pod的相关知识 k8s的pad重启策略: Always deployment的yaml文件只能是Always pod的yaml三种模式都可以。 Onfailure:只有异常退出状态码非0才会重启。正常退出不重启。 Never&#xff1a;非正常退出和非正常退出都不重启。 容器的退出了pod才会重启。 pod可以有多个容器&…

spring Security源码讲解-WebSecurityConfigurerAdapter

使用security我们最常见的代码&#xff1a; Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter {Overrideprotected void configure(HttpSecurity http) throws Exception {http.formLogin().permitAll();http.authorizeRequests().antMatcher…

为什么我国的计算机教育那么差?

建议看看计算机科学速成课&#xff0c;一门很全面的计算机原理入门课程&#xff0c;短短10分钟可以把大学老师十几节课讲不清楚的东西讲清楚&#xff01;整个系列一共41个视频&#xff0c;B站上有中文字幕版。 每个视频都是一个特定的主题&#xff0c;例如软件工程、人工智能、…

顺序表实现(下)(C语言)

几道相关例题,帮助大家更好理解顺序表. 文章目录 前言 一、顺序表二、创建顺序表并初始化三.删除非递减顺序表L中的重复元素四.在非递减顺序表中删除[s,t]之间的元素五.设计算法逆置顺序表L,并将序列L循环左移六.顺序表A和B的元素个数分别为m,n.A表升序排序,B表降序排序,两表中…

AI变现项目:刚做五天收益突破单日破50+,干货经验谈

今日是我单号操作的第五天。 打开今日头条&#xff0c;发现收益破新高了。 我这是一个号操作&#xff0c;10个号&#xff0c;20个号呢&#xff1f; 下面主要说说我的操作经验。 先确定领域 我是做的情感故事领域。 为什么做这个领域&#xff1f;(简单&#xff0c;原创度高…

家用洗地机哪款好用?洗地机品牌排行榜推荐

在如今的日常生活中&#xff0c;家用洗地机已经成为了家庭清洁中不可或缺的工具。然而&#xff0c;市面上各种不同品牌型号的洗地机让人眼花缭乱&#xff0c;让人难以选择。那么&#xff0c;家用洗地机现在买什么牌子质量好呢?为了解答这个问题&#xff0c;笔者选了几款品牌质…