MySQL查询优化最佳实践15条(建议收藏)

目录

1 优化方法(15条)

2 总结


MySQL的数据库常规查询的过程中性能的优化非常重要,其中很多点是和开发习惯有关,能熟练掌握不只能提高工作的效率,同时也能提高个人的技能。有一些优化的技巧同样也适合于其他的数据库比如PostgreSQL、大数据平台等。

基于业务的需要,查询优化在 MySQL 以及任何数据库管理系统中都至关重要。

以下语句可以通过命令行操作,如需要SQL工具可以试用SQLynx或MySQL workbench等

在这里我尝试列出所有可能的技巧来提高 MySQL 数据库的性能。

1 优化方法(15条)

  1. 有效使用索引:
  • 确保 WHERE 子句和 JOIN 条件中涉及的列都已被索引。
  • 示例:如果您有一个按 过滤的查询user_id,请在该列上创建索引:
    CREATE INDEX idx_user_id ON users(user_id);

2. *避免使用 SELECT :

  • 只选择您需要的列,而不是使用SELECT *
  • 例如:不要使用
    SELECT * FROM orders
     而要使用
    SELECT order_id, customer_id, order_date FROM orders

3.优化JOINS:

  • 当您只需要匹配的行时,请使用 INNER JOIN;当您想要左表的所有行时,请使用 LEFT JOIN。
  • 例子:
    SELECT users.name, orders.order_id FROM users INNER JOIN orders ON users.user_id = orders.user_id;

4. LIMIT 结果:

  • 当您不需要所有结果时,请使用LIMIT限制返回的行数。
  • 例子:
    SELECT * FROM products LIMIT 10;

5.避免使用子查询:

  • 尽可能将子查询重写为 JOIN,以提高性能。
  • 示例:转换
    SELECT name FROM products WHERE category_id = (SELECT category_id FROM categories WHERE name = 'Electronics')
    为 JOIN。

6.使用 UNION 代替 OR:

  • 用 替换多个OR条件以UNION获得更高效的查询。
  • 示例:更改
    SELECT * FROM products WHERE price > 100 OR category = 'Electronics'
    UNION查询。

7.避免在 LIKE 查询开始时使用通配符:

  • LIKE%无法利用索引开头的模式。尽可能避免。
  • 例如:使用name LIKE 'app%'而不是name LIKE '%app%'

8.批量插入和更新:

  • 插入或更新多行时,使用批处理语句,例如
    INSERT INTO ... VALUES (...), (...), (...))
  • 例子:
    INSERT INTO products (name, price) VALUES ('Product1', 10), ('Product2', 20), ('Product3', 30);

9.避免在WHERE中使用函数:

  • 将函数应用于 WHERE 子句中的列可以防止索引的使用。
  • 例如:不要WHERE YEAR(order_date) = 2023使用 ,而要使用
    WHERE order_date >= '2023-01-01' AND order_date < '2024-01-01'

10.使用EXPLAIN分析查询:

  • 利用该EXPLAIN语句分析查询执行计划并进行相应的优化。
  • 例子:
    EXPLAIN SELECT * FROM customers WHERE country = 'USA';

11.规范化数据:

  • 规范化您的数据库以减少冗余并提高查询效率。
  • 示例:不要将重复数据(如州名称)存储在多行中,而是使用单独的州表并使用外键链接它们。

12.避免使用ORDER BY RAND():

  • 对于大型数据集,使用速度ORDER BY RAND()可能非常慢。请考虑使用其他方法来随机化结果。
  • 示例:而不是SELECT * FROM products ORDER BY RAND() LIMIT 10,使用更有效的随机化技术。

13.缓存聚合:

  • 缓存经常使用的聚合数据以减少昂贵的计算的需要。
  • 示例:将每日销售总额存储在单独的表中并定期更新。

14.优化数据类型:

  • 使用最合适的数据类型以最小化存储并提高查询速度。
  • 例如:如果某列只需要存储 1 到 100 之间的整数,则使用TINYINT而不是INT

15.对大表进行分区:

  • 对于大型表,请考虑分区以提高查询性能。
  • 示例:按日期对表进行分区,将数据拆分为按月或按年分区,以便更快地检索数据。

2 总结

SQL优化对于MySQL数据库的高效运行至关重要。它不仅提高了查询性能和资源利用率,还降低了运行成本,提高了系统的可靠性和用户体验。因此,在日常数据库管理和开发过程中,持续关注和实施SQL优化实践是非常必要的。

上述这些技巧可以帮助您优化 MySQL 查询并提高整体数据库性能。

请记住,优化取决于数据库和查询的特定要求和特性,因此请始终衡量更改的影响。

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

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

相关文章

细说MCU修改回调函数调用模式的方法

目录 1、硬件及工程 2、实现方法 &#xff08;1&#xff09;修改while(1)中的代码&#xff1a; &#xff08;2&#xff09;修改2 &#xff08;3&#xff09;修改3 &#xff08;4&#xff09;修改4 &#xff08;5&#xff09;修改5 3、下载并运行 在本文作者的文章中&a…

MySQL-----排序 GROUP BY

在我们对数据进行分析的时候&#xff0c;通常会根据一个或多个列对结果集进行分组&#xff0c;从而得到我们想要的结果。例如&#xff1a;统计考某一门课程的学生信息等。 而MySQL的GROUP BY 语句根据一个或多个列对结果集进行分组。同时&#xff0c;我们也可以使用 COUNT, SUM…

NHANES数据库及应用

NHANES数据库使用 NHANES - National Health and Nutrition Examination Survey Homepage (cdc.gov) 保姆级NHANES数据库使用教程 - 哔哩哔哩 (bilibili.com) 该数据库所涉及的参与者的死亡状况 &#xff1a;Data Access - National Death Index (cdc.gov) TyG对CVD的影响研…

【培训】企业档案管理专题(私货)

导读&#xff1a;通过该专题培训&#xff0c;可以系统了解企业档案管理是什么、为什么、怎么做。尤其是对档案的价值认知&#xff0c;如何构建与新质生产力发展相适应的企业档案工作体系将有力支撑企业新质生产力的发展&#xff0c;为企业高质量发展贡献档案力量&#xff0c;提…

运维系列.在Docker中使用Grafana

运维专题 在Docker中使用Grafana - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_2855026…

大厂面试必备:如何轻松实现分布式Session管理?

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!​​​​​​​ 大家好,我是小米,一个29岁的技术爱好者,喜欢分享各种技术干货。今天我们来聊一聊阿里巴巴面试中的一个经典问题:如何实现分布式Sess…

鸿蒙轻内核A核源码分析系列五 虚实映射(2)虚实映射初始化

2、 虚拟映射初始化 在文件kernel/base/vm/los_vm_boot.c中的系统内存初始化函数OsSysMemInit()会调用虚实映射初始化函数OsInitMappingStartUp()。该函数代码定义在文件arch/arm/arm/src/los_arch_mmu.c&#xff0c;代码如下。⑴处函数使TLB失效&#xff0c;清理虚实映射缓存…

深度学习(四)——torchvision中数据集的使用

1. 参数详解 torchvision中每个数据集的参数都是大同小异的&#xff0c;这里只介绍CIFAR10数据集 该数据集的数据格式为PIL格式 class torchvision.datasets.CIFAR10(root:str,train:boolTrue,transform:Optional[Callable]None,target_transform:Optional[Callable]None,do…

《庆余年》角色穿越高考:谁将笑傲现代考场?

一、引言 《庆余年》是一部以古代中国为背景的权谋小说&#xff0c;其角色们各具特色&#xff0c;聪明才智、武艺高强、忠诚耿直等特质使得他们在古代世界中游刃有余。然而&#xff0c;如果我们将这些角色置于现代高考的背景之下&#xff0c;他们将如何面对这一挑战&#xff1…

Java版电子招标采购系统源码:实现企业采购战略与流程的数字化革新

随着企业的发展&#xff0c;内部采购管理面临着日益增长的挑战。为了提升采购效率&#xff0c;确保采购过程的透明性和公正性&#xff0c;企业需要一个高效、规范的电子招标采购系统。鸿鹄电子招投标系统正是为此而设计&#xff0c;它采用Java技术&#xff0c;结合先进的微服务…

javaWeb项目-ssm+vue网上租车系统功能介绍

本项目源码&#xff1a;java-基于ssmvue的网上租车系统源码说明文档资料资源-CSDN文库 项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、…

Liinux:进程程序替换

替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用e…

Pikachu上的CSRF以及NSSCTF上的[NISACTF 2022]bingdundun~、 [SWPUCTF 2022 新生赛]xff

目录 一、CSRF CSRF(get) login CSRF(post) CSRF Token 二、CSRF的相关知识点 &#xff08;1&#xff09;什么是CSRF&#xff1f; &#xff08;2&#xff09;工作原理 &#xff08;3&#xff09;CSRF漏洞形成的条件 1、用户要在登录状态&#xff08;即浏览器保存了该…

别再忽视数组排序的重要性了

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

线稳源极跟随 线性电源前端降压

功率MOSFET线性电源涉及跟随.ms14 根本原理是Vgs对Id的控制&#xff0c;Vgs越大&#xff0c;Id越大&#xff0c;反之亦然。 观察转移特性曲线&#xff0c;结合接线图可知&#xff0c;电路稳定后&#xff0c;如果负载电阻增大&#xff0c;则Vsgnd增大&#xff0c;由于Vggnd有稳…

ONNX2NCNN工具

最近部署很多onnx转ncnn的操作&#xff0c;发现还是需要有页面操作会比较好&#xff0c;而且需要查询onnx的图&#xff0c;所以写了一个工具来搭配使用 建议搭配Netron 来使用 打开模型 选择打开-》选择onnx模型 显示基础信息 查询onnx模型图 展示信息 点击“展示信息”&…

vb.net小demo(计算器、文件处理等/C#也可看)

Demo1&#xff1a;使用窗体控件实现一个简易版计算器 Public Class Form1Private Sub Button_1_Click(sender As Object, e As EventArgs) Handles Button_1.ClickCalSubBox.Text Button_1.TextEnd SubPrivate Sub Button_2_Click(sender As Object, e As EventArgs) Handles …

B端系统的颜值问题:成也框架,败也框架!

B端UI框架和前端框架的出现&#xff0c;让系统的搭建就像堆积木一样&#xff0c;十分的容易了。这也一下子把程序员的设计和审美水平拔高到了UI框架能够达到的高度。伴随而来的则是系统的堆砌、同质化、糟糕的体验&#xff0c;以及各种违和的组件被生搬硬套的绑定在一块&#x…

nosql数据库的特点

NoSQL简介 NoSQL是一种不同于关系数据库的数据库管理系统设计方式,是对非关系型数据库的统称,它所采用的数据模型并非传统关系数据库的关系模型,而是类似键/值、列族、文档等非关系模型。NoSQL数据库没有固定的表结构,通常也不存在连接操作,也没有严格遵守ACID约束。因此…

虚拟机开启网络代理设置

前言&#xff1a; 不管是物理主机还是实验环境中的VMware虚拟机&#xff0c;有时候总要访问一些镜像网站或者资源网站拉取一些学习资料&#xff0c;但由于国内外网络环境的差异和网络安全的问题。总是会被阻拦。物理机相对比较容易一些&#xff0c;今天我们来说一说虚拟机应该…