MySQL SQL性能优化方案(SQL优化 二)

插入数据优化

1. 多个值同时插入:多个值的插入语句可以减少与数据库的通信次数,从而提高插入性能

insert into 表名 (列1, 列2, 列3)
values
(值1, 值2, 值3),
(值4, 值5, 值6),
...

2. 命令批量插入:高效地将数据从文件导入到数据库中(要求文件格式要规范)

-- 客户端连接服务端时,加上参数 -–local-infile
mysql –-local-infile -u root -p
-- 设置全局参数local_infile为1,开启从本地加载文件导入数据的开关
set global local_infile = 1;

-- 导入操作

load data infile '文件路径' -- 相对路径和绝对路径都可以
into table 表名
fields terminated by ',' -- 指定字段分隔符
lines terminated by '\n' -- 指定行分隔符

如果是工具(比如Navicat的话),直接选择导入sql文件就行

3.禁用表索引(不建议,插入数据时,会导致索引不可用)

alter table 表名 disable keys;-- 禁用
-- 中间为插入操作
alter table 表名 enable keys;-- 打开

4.使用事务:将插入操作包装在事务中可以提高性能和数据一致性

start transaction;
insert into 表名 values(1,''),(2,''),(3,'');
insert into 表名 values(4,''),(5,''),(6,'');
insert into 表名 values(7,''),(8,''),(9,'');
commit;

5.主键顺序插入:性能高于乱序插入

主键乱序插入 : 5 1 4 3 2 7
主键顺序插入 : 1 2 3 4 5 7

--------------------------------

order by优化

MySQL查询执行计划中的两种不同的排序方式:

1. Using filesort:当MySQL无法使用索引完成排序时,会使用Using filesort,这意味着MySQL将在内存或磁盘上创建临时文件,并对结果集进行排序。这种操作可能会导致性能下降,特别是在处理大量数据时。

2. Using index:当MySQL能够使用索引完成排序时,会使用Using index。这意味着MySQL可以直接使用索引的有序性,而无需额外的排序操作,这通常是因为查询中的ORDER BY子句与已经存在的索引匹配。

对于以上的两种排序方式,Using index的性能高,而Using filesort的性能低,我们在优化排序
操作时,尽量要优化为 Using index。

order by优化原则:如何使用 Using index?

1. 根据排序字段建立合适的索引,多字段排序时,也遵循最左前缀法则。

create index 索引名 on employees (字段1, 字段2);-- 先对字段1排序,再对字段2排序


2. 尽量使用覆盖索引。

覆盖索引是指查询使用了索引,并且需要返回的列(包含数据),在该索引中已经全部能够找到。

-- 建立覆盖索引
create index idx_orders on orders (order_date, order_id, customer_id);

-- 查询(根据覆盖索引列)
select order_id, customer_id, order_date from orders where order_date >= '2020-01-01';


3. 多字段排序, 一个升序一个降序,此时需要注意联合索引在创建时的规则(ASC/DESC)。

create index idx_products on products (product_name asc, price desc);

--------------------------------

group by优化

在分组操作中,以提升性能方法:
1. 在分组操作时,可以通过索引来提高效率(分组的列为索引)
2. 分组操作时,索引的使用也是满足最左前缀法则的(分组为多个列)

--------------------------------

limit优化

经典问题:你如何优化SQL语句 limit 2000000或者 limit 2000000,10?

1. 建立临时表,减少扫描量和排序量

-- 建立

create temporary table temp_table as
select * from 表名
order by 列名
limit 2000000;

-- 查询

select * from temp_table;

 2. 通过覆盖索引加子查询形式进行优化

-- 例子

select * from 表1 t , (select id from 表1 order by id limit 2000000,10) a

where t.id = a.id;

--------------------------------

count优化

效率排序:count(字段) < count(主键 id) < count(1) ≈ count(*),所以尽量使用 count(*)

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

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

相关文章

vue3+vite+uniapp 封装一个省市区组件

一、预览图 二、使用前的一些注意事项 只支持在 uniapp vue3 项目中使用支持微信小程序和h5 (app端没有测试过)ui库用的 uview-plus省市区数据用的是 vant-ui 提供的一个赖库 vant/area-data 三、组件代码 <template><u-popup :show"show" type"botto…

软件工程与计算总结(二)软件工程的发展

本章开始介绍第二节内容&#xff0c;主要是一些历史性的东西~ 一.软件工程的发展脉络 1.基础环境因素的变化及其对软件工程的推动 抽象软件实体和虚拟计算机都是软件工程的基础环境因素&#xff0c;它们能从根本上影响软件工程的生产能力&#xff0c;而且是软件工程无法反向…

Zabbix 监控系统安装和部署

Zabbix 监控系统安装和部署 一、zabbix 是什么&#xff1f;1.1、zabbix 监控原理&#xff08;重点&#xff09;1.2、Zabbix 6.0 新特性1.3、Zabbix 6.0 功能组件1.4、数据库1.5、Web 界面1.6、Zabbix Agent1.7、Zabbix Proxy1.8、Java Gateway 二、部署Zabbix 6.02.1、 解决 za…

Configuration of phpstudy and sqli-labs

Go download the app&#xff1a; 小皮面板(phpstudy) - 让天下没有难配的服务器环境&#xff01; (xp.cn) Have done. Then enter the program. Enable both functions&#xff1a; Apache and MySQL. Open the website&#xff1a; Next, Lets make the sqli-liab. GitHub…

[论文笔记]GLM

引言 今天带来论文GLM: General Language Model Pretraining with Autoregressive Blank Infilling的笔记。论文中文标题为 通用语言模型预训练与自回归填空。 有很多不同类型的预训练架构,包括自编码模型(BERT、RoBERTa、ALBERT)、自回归模型(GPT系列)以及编码器-解码器模型…

系统架构设计:论文论点目录

目录 系统架构设计&#xff1a;1 论软件系统建模方法及其应用 系统架构设计&#xff1a;2 论软件设计方法及其应用 系统架构设计&#xff1a;3 软件架构建模技术与应用 系统架构设计&#xff1a;4 论微服务架构及其应用 系统架构设计&#xff1a;5 论软件的可靠性设计 系统…

基于MDK-Keil环境如何把STM32程序直接下载到SRAM运行

1. 前言 对于 Cortex-M 内核的微控制器&#xff0c;它们都可以支持在 RAM 中执行程序&#xff0c;有些非 ARM 的微控制器是不支持的。 在内部 SRAM 执行程序&#xff0c;有基于以下几方面的原因&#xff1a; 1、所使用的设备可能具有OTP&#xff08;One-time Programmable&a…

笔记一:odoo透视表和图表

透视表 1、首先在xml文件添加pivot 说明&#xff1a;&#xff08;1&#xff09;根元素pivot中属性&#xff1a; disable_linking&#xff1a;设置为True&#xff0c;删除表格单元格到列表视图的链接 display_quantity&#xff1a;设置为True&#xff0c;默认显示“数量”列 d…

关于IDEA中gradle项目bootrun无法进入断点以及gradle配置页面不全的解决方案

问题背景 在使用gradle编写的bootrun&#xff0c;采用debug方式启动项目时&#xff0c;无法进入断点&#xff0c;程序正常运行 并发现象1 此处无法识别为大象图标 点击右键后&#xff0c;没有圈中的这个选项 并发现象2 图片圈中的位置缺失 问题原因 正常的 run 命令是通过…

SoapUI实践:自动化测试、压力测试、持续集成

因为项目的原因&#xff0c;前段时间研究并使用了 SoapUI 测试工具进行自测开发的 api。下面将研究的成果展示给大家&#xff0c;希望对需要的人有所帮助。 SoapUI 是什么&#xff1f; SoapUI 是一个开源测试工具&#xff0c;通过 soap/http 来检查、调用、实现 Web Service …

[Android] Inent启动参数分析

Android中有哪四种启动模式&#xff1f; **android:launchMode"standard"启动模式 标准模式&#xff0c;**每次启动Activity都会创建一个新的实例&#xff0c;不管此前是否已存在该Activity的实例&#xff0c;Activity默认采用标准模式启动。**android:launchMode&q…

图片加载错误,显示默认图片

方法一&#xff1a;在img标签里&#xff0c;添加onerror事件 <img class"imgcls-err" style"min-height:250px" src"../images/facerule.jpg" onerror"javascript:this.src ../images/facerule.jpg;this.οnerrοrnull" id"…

C++ 常量对象及常量成员函数

#include <stdexcept> #include <iostream>struct Vector2 {float x;float y;// 通过[0]或[1]访问x或y分量float& operator[](int index){switch (index){case 0: return x;case 1: return y;default:throw std::out_of_range("Invalid Vector2 index!&qu…

springboot和vue:十、vue2和vue3的差异+组件间的传值

首先用vue-cli创建一个vue2的项目。 vue2和vue3的差异 main.js的语法有所差别。 vue2是 import Vue from vue import App from ./App.vuenew Vue({render: h > h(App), }).$mount(#app)vue3是 import { createApp } from vue import App from ./App.vuecreateApp(App).…

Flask 进行 Web 开发时,常见的错误

ImportError: No module named ‘flask’ 错误描述&#xff1a; 这个错误表示 Python 找不到 Flask 模块。解决方法&#xff1a; 确保已经正确安装了 Flask 模块。你可以使用以下命令来安装 Flask&#xff1a;pip install flaskAttributeError: ‘module’ object has no attri…

Java虚拟机内存模型

JVM虚拟机将内存数据分为&#xff1a; 程序计数器、虚拟机栈、本地方法栈、Java堆、方法区等部分。 程序计数器用于存放下一条运行的指令&#xff1b; 虚拟机栈和本地方法栈用于存放函数调用堆栈信息&#xff1b; Java堆用于存放Java程序运行时所需的对象等数据&#xff1b…

学习笔记|串口通信的基础知识|同步/异步|RS232|常见的串口软件的参数|STC32G单片机视频开发教程(冲哥)|第二十集:串口通信基础

目录 1.串口通信的基础知识串口通信(Serial Communication)同步/异步&#xff1f;全双工&#xff1f;常见的串口软件的参数 2.STC32的串口通信实现原理引脚选择&#xff1a;实现分时复用模式选择串口1模式1&#xff0c;模式1波特率计算公式 3.串口通信代码实现编写串口1通信程序…

前端 | AjaxAxios模块

文章目录 1. Ajax1.1 Ajax介绍1.2 Ajax作用1.3 同步异步1.4 原生Ajax 2. Axios2.1 Axios下载2.2 Axios基本使用2.3 Axios方法 1. Ajax 1.1 Ajax介绍 Ajax: 全称&#xff08;Asynchronous JavaScript And XML&#xff09;&#xff0c;异步的JavaScript和XML。 1.2 Ajax作用 …

用pandas处理数据时,使变量能够在不同的Notebook会话页面进行传递,魔法命令%store

【需求来源】 在使用pandas时&#xff0c;有的时候我想将.ipynb文件分开写 其中一个写清洗数据代码另外一个写数据可视化代码 【解决方案】 但是会涉及到变量转移问题&#xff0c;这个时候我通常使用的方法是&#xff1a; 1、在清洗完数据后导出到本地 2、在文件后面增加当…

vue3+elementPlus:el-tree复制粘贴数据功能,并且有弹窗组件

在tree控件里添加contextmenu属性表示右键点击事件。 因右键自定义菜单事件需要获取当前点击的位置&#xff0c;所以此处绑定动态样式来控制菜单实时跟踪鼠标右键点击位置。 //html <div class"box-list"><el-tree ref"treeRef" node-key"id…