进阶-3.SQL优化

news2024/9/27 7:26:23

SQL优化

    • 1. 插入数据
    • 2.主键优化
    • 3.order by 优化
    • 4.group by 优化
    • 5.limit优化
    • 6.count优化
    • 7.update优化
    • 8.总结

1. 插入数据

insert优化

  • 批量插入
insert into user values(1,'tom'),(2,'Cat'),(3,'Hello');
  • 手动事务提交
start transaction;
insert into user values(1,'tom'),(2,'Cat'),(3,'Hello');
insert into user values(4,'tom'),(5,'Cat'),(6,'Hello');
insert into user values(7,'tom'),(8,'Cat'),(9,'Hello');
commit;
  • 主键顺序插入
  • 大批量数据插入

如果一次性需要插入大批量数据,使用insert语句插入性能比较低,可以使用load指令插入

在这里插入图片描述
在这里插入图片描述
#客户端连接服务器,加上参数–local-infile

 mysql --local-infile -u root -p  

#设置全局参数local_infile为1,开启从本地加载文件导入数据的开关

mysql> set global local_infile=1;
Query OK, 0 rows affected (0.00 sec)
#查询参数值
mysql> select @@local_infile;
+----------------+
| @@local_infile |
+----------------+
|              1 |
+----------------+
1 row in set (0.00 sec)

#执行load命令将准备好的数据加载到数据库

load data local infile '数据路径' into table tb_user fields terminated by ',' lines terminated by '\n' 

主键顺序插入的性能高于乱序

2.主键优化

  • 数据组织方式

在innoDB存储引擎中,表数据是根据主键顺序组织存放的,这种存储方式的表称为索引组织表
在这里插入图片描述

  • 页分裂
    在这里插入图片描述
  • 页合并
    在这里插入图片描述
    在这里插入图片描述
  • 主键设计原则

满足业务需求地情况下,尽量降低主键的长度
插入数据时,尽量选择顺序插入,选择使用auto_increment自增主键
尽量不要使用uuid作为主键
业务操作时,避免对主键修改
在这里插入图片描述

3.order by 优化

在这里插入图片描述

show index from emp;
create index idx_emp_age_job_sal on  emp(age,job,salary);

SELECT id,age,job from emp order by age;

创建索引之后order by排序

EXPLAIN SELECT id,age, job from emp order by age,  job ;

在这里插入图片描述
order by排序进行降序,倒序索引

EXPLAIN SELECT id,age, job from emp order by age desc ,  job desc;

在这里插入图片描述

EXPLAIN SELECT id,age, job from emp order by age asc ,  job desc;

在这里插入图片描述
创建order by索引

create index idx_emp_age_job_ad on emp(age asc,job desc);

EXPLAIN SELECT id,age, job from emp order by age asc ,  job desc;

在这里插入图片描述

根据排序建立合适的索引
尽量使用覆盖索引
如果无法避免使用filesort
在这里插入图片描述

show variables like 'sort_buffer_size';#默认256k

4.group by 优化

Using temporary

explain select job,count(*) from emp group by job;

在这里插入图片描述

create index idx_emp_age_job_sal on  emp(age,job,salary);
mysql> explain select job,count(*) from emp group by job;
+----+-------------+-------+------------+-------+---------------------+---------------------+---------+------+------+----------+------------------------------+
| id | select_type | table | partitions | type  | possible_keys       | key                 | key_len | ref  | rows | filtered | Extra                        |
+----+-------------+-------+------------+-------+---------------------+---------------------+---------+------+------+----------+------------------------------+
|  1 | SIMPLE      | emp   | NULL       | index | idx_emp_age_job_sal | idx_emp_age_job_sal | 73      | NULL |   13 |   100.00 | Using index; Using temporary |
+----+-------------+-------+------------+-------+---------------------+---------------------+---------+------+------+----------+------------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> explain select age,job,count(*) from emp group by age,job;
+----+-------------+-------+------------+-------+---------------------+---------------------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type  | possible_keys       | key                 | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-------+------------+-------+---------------------+---------------------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | emp   | NULL       | index | idx_emp_age_job_sal | idx_emp_age_job_sal | 73      | NULL |   13 |   100.00 | Using index |
+----+-------------+-------+------------+-------+---------------------+---------------------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)
mysql> explain select job,count(*) from emp  where age=50 group by job;
+----+-------------+-------+------------+------+---------------------+---------------------+---------+-------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys       | key                 | key_len | ref   | rows | filtered | Extra       |
+----+-------------+-------+------------+------+---------------------+---------------------+---------+-------+------+----------+-------------+
|  1 | SIMPLE      | emp   | NULL       | ref  | idx_emp_age_job_sal | idx_emp_age_job_sal | 5       | const |    1 |   100.00 | Using index |
+----+-------------+-------+------------+------+---------------------+---------------------+---------+-------+------+----------+-------------+

在这里插入图片描述

5.limit优化

在这里插入图片描述

6.count优化

在这里插入图片描述

在这里插入图片描述

7.update优化

避免行锁升级为表锁
在这里插入图片描述

8.总结

在这里插入图片描述

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

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

相关文章

区块链浪潮:Web3时代的数字经济新格局

随着科技的迅猛发展,全球经济正迎来一场前所未有的变革,区块链技术正在其中扮演着关键角色。Web3作为下一代互联网的核心,正在通过区块链技术重塑数字经济的格局,为全球市场带来新的机遇和挑战。这场以去中心化为特征的技术革命&a…

『功能项目』鼠标双击人物跟随【03】

我们打开上一篇02的射线点击项目, 本章要做的事情是在PlayerRayNavgation脚本中添加一个双击跟随函数,实现人物在场景中鼠标双击后主角跟随鼠标移动功能。 添加代码后保存代码运行项目,鼠标双击后主角即可实现跟随鼠标移动效果。 本篇只实现了…

PHP之 in_array判断出来的结果错误

示例 <?php $a "[232087,232468,234691,235390,235513,235550,235573,235611,235636,235637,235652,235672,235674,235695,235697,235711,235721,235733,235739,235754,235764,235795,235808,235833,235834,235836,235857,235861,235870,235883,235887,235888,23591…

STM32————SPI硬件外设实现读写

首先是理论知识&#xff1a; 常用8位数据帧、高位先行 SPI的时钟由PCLK内部时钟分频得来&#xff0c;最大可到36MHz 精简为半双工就是去掉一根数据线后&#xff0c;用剩下的一根作为发送/接收数据&#xff1b;单工就是去掉接收线&#xff0c;只用发送线进行发送数据&#xf…

python绘制爱心代码

效果展示 完整代码 Python中绘制爱心的代码可以通过多种方式实现&#xff0c;高级的爱心代码通常指的是使用较复杂的算法或者图形库来生成更加精致的爱心图形。下面是一个使用Python的Turtle模块来绘制爱心的示例代码&#xff1a; import turtledef draw_love():turtle.speed…

python-货物种类(赛氪OJ)

[题目描述] 某电商平台有 n 个仓库&#xff0c;编号从 1 到 n 。当购进某种货物的时候&#xff0c;商家会把货物分散的放在编号相邻的几个仓库中。我们暂时不考虑售出&#xff0c;你是否能知道&#xff0c;当所有货物购买完毕&#xff0c;存放货物种类最多的仓库编号为多少&…

数字身份革命:探索Web3对个人隐私的保护

在数字化时代&#xff0c;个人隐私和数据保护成为越来越重要的话题。随着Web3的兴起&#xff0c;这一领域正在经历一场深刻的变革。Web3不仅仅是技术的演进&#xff0c;更是对个人隐私保护的一次革命性革新。本文将探讨Web3如何通过去中心化技术重新定义数字身份&#xff0c;并…

Moodle集成ONLYOFFICE文档:提高师生协作效率的最佳解决方案

引言 通过一些教育机构和老师朋友的推荐&#xff0c;我最近了解到了一款非常实用的办公软件组合——Moodle与ONLYOFFICE。作为一名教师&#xff0c;日常教学中的文档编辑、课程管理和学生协作是不可避免的任务。虽然市场上有很多办公软件&#xff0c;但Moodle与ONLYOFFICE的结…

稚晖君智元机器人远程机器人系列发布:引领具身智能新高度

在最近的发布会上&#xff0c;前华为“天才少年”稚晖君及其团队亮相了他们的最新作品——智元机器人的第二代远程机器人系列。这次发布会不仅展示了丰富的产品线&#xff0c;还揭示了其未来的发展路线以及开源计划。本文将详细解析本次发布会的亮点和技术背后的创新。 一、发…

企业数字化转型是什么?有什么用?

什么是数字化转型&#xff1f;为什么要数字化转型&#xff1f;对企业有何价值&#xff1f;一文给你讲透&#xff01; 先来给大家简单易懂的方式介绍一下&#xff0c;就很明白什么是数字化&#xff1f;企业为什么要数字化转型了。 “信息化”可理解为&#xff1a;是用电脑或者手…

BAT 实现五子棋人机对战

&#x1f680;欢迎互三&#x1f449;&#xff1a;程序猿方梓燚 &#x1f48e;&#x1f48e; &#x1f680;关注博主&#xff0c;后期持续更新系列文章 &#x1f680;如果有错误感谢请大家批评指出&#xff0c;及时修改 &#x1f680;感谢大家点赞&#x1f44d;收藏⭐评论✍ 引言…

【python】Python中小巧的异步web框架Sanic快速上手实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Java 3.1 - 计算机网络

目录 OSI 七层协议是什么&#xff1f;每一层的作用是什么&#xff1f; TCP / IP 四层模型是什么&#xff1f;每一层的作用是什么&#xff1f; 应用层&#xff08;Application Layer&#xff09; 传输层&#xff08;Transport Layer&#xff09; 网络层&#xff08;Network …

Linux系统编程(15)send/recv函数

一、send/recv send 和 recv 是在网络编程中常用的两个函数&#xff0c;用于在套接字&#xff08;socket&#xff09;之间发送和接收数据。 1.send 函数 用于将数据发送到连接的套接字。 ssize_t send(int sockfd, const void *buf, size_t len, int flags); sockfd&#…

掌握语义内核(Semantic Kernel):如何使用Memories增强人工智能应用

随着人工智能领域的不断发展&#xff0c;语义内核&#xff08;Semantic Kernel&#xff09;的概念应运而生&#xff0c;为我们处理和理解庞大的数据集提供了新的视角。今天&#xff0c;我们将聚焦于语义内核中的一个核心概念——Memories&#xff0c;它是如何使我们的数据查询更…

跨入数字新时代:探寻数字媒体技术的魅力与前景

在当今数字化的时代&#xff0c;数字媒体技术如同一股汹涌的浪潮&#xff0c;席卷着我们生活的方方面面&#xff0c;展现出无与伦比的魅力和广阔无垠的前景。 数字媒体技术的魅力首先体现在它为信息传播带来的革命性变化。以往&#xff0c;我们通过书本、报纸、电视等传统媒介获…

SpringBoot教程(二十五) | SpringBoot整合Sharding-JDBC分库分表

SpringBoot整合Sharding-JDBC分库分表 前言1. 什么是Sharding&#xff1f;2. 什么是Sharding-JDBC&#xff1f; 所需的maven依赖注意点&#xff08;关于shardingsphere的配置情况&#xff09;实操一&#xff1a;如何水平分表1. 步骤说明2. 创建数据库和表3.配置application.pro…

java反序列化之CommonCollections1利⽤链的学习

一、源起 1、代码示例 既然学习cc1链&#xff0c;那么总要先了解下cc1链能造成任意代码执行的原因&#xff0c;这里引用P神的代码来进行讲解&#xff1a; ps:环境使用&#xff1a; CommonsCollections < 3.2.1java < 8u71 import org.apache.commons.collections.Trans…

【Python机器学习】NLP分词——利用分词器构建词汇表(一)

在NLP中&#xff0c;分词&#xff08;也称切词&#xff09;是一种特殊的文档切分过程。而文档切分能够将文本切分成更小的文本块或片段&#xff0c;其中含有更集中的信息内容。文档切分可以是将文本分成段落&#xff0c;将段落分成句子&#xff0c;将句子分成短语&#xff0c;或…

C语言学习——文件

目录 十三、文件 13.1C文件概述 13.2文件类型指针 13.3文件的打开与关闭 文件的打开&#xff08;fopen函数&#xff09; 文件的关闭&#xff08;fclose函数&#xff09; 13.4文件的读写 fputc函数和fgetc函数&#xff08;putc函数和getc函数&#xff09; fread函数和fw…