MySQL学习(15):SQL优化:load、order by、group by

news2024/9/23 15:20:25

1.大批量插入数据指令load

当需要大批量插入数据时,insert的效率比较低,此时可以使用load命令

使用方法如下:

(1)客户端连接服务端时,加上参数--local-infile

mysql --local-infile -u root -p

(2)设置全局参数local infile为1,开启从本地加载文件导入数据的开关

set global local_infile=1;

查看一个参数是否开启的方法是select @@参数名,返回0就是没开启,返回1就是开启了

(3)执行load指令,将准备好的数据,加载到表结构中

load data local infile '数据文件的路径' into table 表名 fields terminated by ',' lines terminated by '\n';
#fields terminated by ',’表示数据不同字段以英文逗号分隔
#lines terminated by '\n';表述不同行的数据以回车换行分隔

插入数据时,要尽量让数据按主键顺序插入(如下图),主键乱序插入影响性能

2.设计主键原则

(1)尽量降低主键的长度。

(2)插入数据时,尽量选择顺序插入

(3)选择使用AUTOINCREMENT自增主键。尽量不要使用UUID做主键或者是其他自然主键,如身份证号。

(4)尽量避免对主键的修改。

3.order by排序查询优化

使用order by进行排序有2种方式:

(1)using filesort:没使用索引进行排序

(2)using index:使用了索引进行排序,效率更高

查看order by语句是否使用了索引,只需要使用explain即可。如下图,在最后一栏的extra中有标注:

3.1多字段排序问题

当order by后有多个字段时,它会先根据第一个字段进行排序,在第一个字段数据相同时,才会再排序第二个字段,所以order by后字段的书写顺序很重要。

索引本身就是一种排序,所以当order by搜索的字段有索引时,可以直接使用索引得出结果,大大提高了效率(前提是使用的覆盖索引)。如下图:

但如果order by后接多个字段进行排序时,就不能简单的使用单列索引了,而是要使用联合索引。这里必须要提一下联合索引的结构。如下图所示,联合索引是先根据最左边的字段建立索引,在左边字段索引相同的情况下才会根据下一个字段进行排序:

这样就会order by排序多字段非常相似,也就直接利用联合索引完成多字段排序,如下图:

当然,如果order by后字段的书写顺序和创建联合索引时字段的书写顺序不一致,就无法完全使用联合索引了,如下图,虽然也是用了联合索引,但最关键的排序过程并不是利用索引得到的:

3.2索引自身的升序降序

order by在搜索时可以根据asc、desc分别得到升序、降序的结果,而索引本身也有升序、降序的区别。

在默认情况下,索引是升序的,但如果用order by来降序排序某个字段也不是不可以使用索引,因为索引的叶子结点是一个双向链表,所以只需要反向排序即可,如下图,出现了backward index scan,代表索引进行了反向扫描:

不过在使用联合索引的时候就需要注意了,像上图这样两个字段都是降序排序那尚且可以使用联合索引反向扫描,但如果一个升序一个降序就不可以了,如下图:

不过,对于这种情况也并不是没有办法。

使用命令查看数据库内索引时,可以看到其顺序标识为A,代表升序(如果是D,则代表降序):

在创建索引时,是可以选择升序还是降序的,在创建联合索引时也可以分别设置字段是不同的排序方式:如下图

这样的联合索引就可以应对前述的问题了。

4.group by分组查询优化

group by分组查询也可以使用索引,如下图:

图中使用的是联合索引,受限于联合索引的最左前缀法则,group by必须按照联合索引的顺序进行分组

(1)下图使用age进行分组,由于缺少了最左边的profession字段,所以并不能完全使用联合索引

(2)同时按照profession与age字段分组,就可以使用索引了

(3)profession字段出现在where后,也可以满足最左前缀法则

select语句里where执行在group by之前

5.count的几种使用方式效率对比

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

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

相关文章

Java实现短信验证码服务

1.首先这里使用的是阿里云的短信服务。 package com.wzy.util;; import cn.hutool.captcha.generator.RandomGenerator; import com.aliyun.dysmsapi20170525.Client; import com.wzy.entity.Ali; import org.springframework.stereotype.Component;/*** Author: 顾安* Descri…

2024年铜川宜君半程马拉松,暴晒+爬坡152安全完赛

1、赛事背景 2024年7月21日,我参加了2024年铜川宜君半程马拉松赛,7月举办的赛事很少,全国都算温度比较高的,虽然宜君是一个山城,还是会担心气温会高。 临开赛1、2周,陕西区域降水比较多,赛前一…

C++从入门到起飞之——初始化列表类型转换static成员 全方位剖析!

🌈个人主页:秋风起,再归来~🔥系列专栏:C从入门到起飞 🔖克心守己,律己则安 目录 1、初始化列表 2、 类型转换 3. static成员 4、完结散花 1、初始化列表 • 之前我们实现构造函数…

在Linux中,部署及优化Tomcat

tomcat概述 自 2017 年 11月编程语言排行榜 Java 占比 13%,高居榜首,Tomcat 也一度成为 Java开发人员的首选。其开源、占用系统资源少、跨平台等特性深受广大程序员喜爱。本章主要学习如何部署 Tomcat 服务,根据生产环境实现多个虚拟主机的配置&#xf…

在el-table单元格中通过div绘制圆、直线和对角线

<el-table-column label"电源屏零层端子" align"center" prop"name2" width"220px"><template #default"scope"><div class"bigCircle"></div><div class"smallCircle">…

EtherNet/IP转Profinet协议网关(经典配置案例)

怎么样才能把EtherNet/IP和Profinet网络连接起来呢?这几天有几个朋友问到了这个问题&#xff0c;作者在这里统一为大家详细说明一下。其实有一个设备可以很轻松地解决这个问题&#xff0c;名为JM-PN-EIP&#xff0c;下面是详细介绍。 一&#xff0c;设备主要功能 1、捷米特J…

eqmx上读取数据处理以后添加到数据库中

目录 定义一些静态变量 定时器事件的处理器 订阅数据的执行器 处理json格式数据和将处理好的数据添加到数据库中 要求和最终效果 总结一下 定义一些静态变量 // 在这里都定义成全局的 一般都定义成静态的private static MqttClient mqttClient; // mqtt客户端 private s…

科研绘图系列:R语言组合堆积图(stacked barplot with multiple groups)

介绍 通常堆积图的X轴表示样本,样本可能会存在较多的分组信息,通过组合堆积图和样本标签分组信息,我们可以得到一张能展示更多信息的可发表图形。 加载R包 knitr::opts_chunk$set(warning = F, message = F) library(tidyverse) library(cowplot) library(patchwork)导入…

R包:plot1cell单细胞可视化包

介绍 plot1cell是用于单细胞数据seurat数据对象的可视化包。 安装 ## You might need to install the dependencies below if they are not available in your R library. bioc.packages <- c("biomaRt","GenomeInfoDb","EnsDb.Hsapiens.v86&qu…

基于飞腾FT2000的嵌入式计算机系统

作为中国嵌入式计算机的领导厂家&#xff0c;是最早进入轨道交通领域的 工业级AFC嵌入式计算机系列产品&#xff0c;充分体现了轨道交通新一代AFC主流新技术的各种特点&#xff0c;为轨道交通AFC系统的升级换代提供了良好的系统平台。 标准化 采用开放式架构的Intel新一代主流…

力扣高频SQL 50题(基础版)第八题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第八题1581. 进店却未进行过交易的顾客题目说明思路分析实现过程准备数据&#xff1a;实现方式&#xff1a;结果截图&#xff1a;总结&#xff1a; 力扣高频SQL 50题&#xff08;基础版&#xff09;第八题 1581. 进店…

操作系统杂项(十)

目录 一、简述socket中select、epoll的使用场景和区别 1、使用场景 2、区别 二、epoll水平触发和边缘触发的区别 三、简述Reactor和Proactor模式 1、Reactor 2、Proactor 3、区别 四、简述同步和异步的区别&#xff0c;阻塞和非阻塞的区别 1、同步与异步 2、阻塞与非…

SpringBoot入门:如何新建SpringBoot项目(保姆级教程)

在本文中&#xff0c;我们将演示如何新建一个基本的 Spring Boot 项目。写这篇文章的时候我还是很惊讶的&#xff0c;因为我发现有些java的初学者&#xff0c;甚至工作10年的老员工居然并不会新建一个SpringBoot项目&#xff0c;所以特别出了一篇文章来教大家新建一个SpringBoo…

状态机 XState 使用

状态机 一般指的是有限状态机&#xff08;Finite State Machine&#xff0c;FSM&#xff09;&#xff0c;又可以称为有限状态自动机&#xff08;Finite State Automation&#xff0c;FSA&#xff09;&#xff0c;简称状态机&#xff0c;它是一个数学模型&#xff0c;表示有限个…

Java链接elasticsearch8.14.1

项目需求&#xff0c;需要实现海量数据的聚合、查询。因为职业生涯开发使用springboot微服务架构、Java开发的方式&#xff0c;所以&#xff0c;项目前期准备了elasticsearch、kibana、logstash的集群环境&#xff0c;作为服务端&#xff0c;用于数据的收集、存储&#xff1b;但…

masscan 端口扫描——(Golang 简单使用总结)

1. 前言 最近要做一个扫描 ip 端口的功能 扫描的工具有很多&#xff0c;但是如何做到短时间扫描大量的 ip 是个相对困难的事情。 市场上比较出名的工具有 masscan和nmap masscan 支持异步扫描&#xff0c;对多线程的利用很好&#xff0c;同时仅仅支持 syn 半开扫描&#xff…

Emacs之解决无法输入中文问题(一百四十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列…

研究生选择学习Android开发的利与弊?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Android的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;产品经理可以学学Axure快…

ForCloud赢战攻防 无惧突发0day漏洞 ForCloud虚实结合快速处置

攻防演练前夕&#xff0c;亚信安全威胁情报中心监测到一个存在于Nacos Derby中的0day漏洞&#xff0c;漏洞利用代码为公开状态&#xff0c;攻击者利用此漏洞可在目标服务器上执行任意代码。 造成的破坏程度&#xff1f;你可能正在使用&#xff01; Nacos&#xff08;Dynamic …

【React】事件绑定:深入解析高效处理用户交互的最佳实践

文章目录 一、什么是事件绑定&#xff1f;二、基本事件绑定三、绑定 this 上下文四、传递参数五、事件对象六、事件委托七、常见事件处理八、优化事件处理 React 是现代前端开发中最受欢迎的框架之一&#xff0c;其组件化和高效的状态管理能力使得构建复杂的用户界面变得更加容…