SQL 高阶 (sql优化)

news2024/11/15 12:19:12

批量插入:

sql 批量插入:

INSERT INTO users(name, age) VALUES ('Tom', 20), ('Jerry', 22), ('Bob', 19); --  该方式 适合 500条以内。

多线程插入批量插入,能够大幅提升插入速度。
经过测试:系统性能,8核16G 插入10w条数据。

性能测试50个线程100个线程
一次插入100条32402ms27261ms
一次插入500条32712ms27916ms
一次插入1000条44174ms30129ms

总结:批量插入,多线程具有优势(根据cpu和磁盘读写能力 ),数据量控制在100-500 之间

     //插入核心代码如下
    @GetMapping(value = "add")
    public void add(int thread,int insert,int batch) {
        if(batch>0)COUNT = batch;
        executor = Executors.newFixedThreadPool(thread);
        finish = 0;
        startTime = System.currentTimeMillis();
        int mj = insert/COUNT;
        for (int i = 0; i < mj; i++) {
            insert(COUNT);
        }
        if(insert%COUNT>0){
            insert(insert%COUNT);
        }
    }
    public void insert(int count) {
        executor.submit(() -> {
            List<Object[]> users = new ArrayList<>();
            Random random = new Random();
            for (int i = 0; i < count; i++) {
                Object[] a = new Object[5];
                a[name] = getMin(random);
                a[age] = i % 10 + 20;
                a[phone] = 13000000000L + (random.nextLong() % 100000000L);
                a[profession] = professions[random.nextInt(professions.length - 1)];
                a[mark] = marks[random.nextInt(marks.length - 1)];
                users.add(a);
            }
            int[] ints = jdbcTemplate.batchUpdate("insert into users (name,age,phone,profession,mark) values(?,?,?,?,?)", users);
            long temp = System.currentTimeMillis()-startTime;
            System.out.println("线程"+(finish++)+"完成时间:"+temp);
        });
    }

load 插入

几万几百万:
下面的方式 是通过文件加载进入数据库。
文件放到 D:/users.sql 中。liunx 就输入 liunx 文件目录。 你的sql 在哪里执行,文件就在那个服务器上。
格式如下:

1,Tom,20   -- 数据的顺序要和的表 属性顺序一致
2,Jerry,22
3,Bob,19
load data local infile 'D:/users.sql' into table user_test fields terminated by ',' lines terminated by '\n';
-- fields terminated by ',' 表示 属性和属性之间用 ‘,’ 分割。
-- lines terminated by '\n' 表示 数据行用 ‘换行’ 分割。

innDB 在存储数据时 ,是分区域分页分行存储的。为啥查询速度快,数据会更具id的大小进行顺序存储,当数据插入数据的id是uuid时,就会导致乱序插入,频发触发存储地址的整理,导致插入效率变低。
在这里插入图片描述

主键设计原则

1、满足业务需求的情况下,尽量降低主键的长度,可以节省磁盘读写速度。
2、插入数据时,尽量选择顺序插入,选择使用AUTO_INCREMENT自增主键,。
3、尽量不要使用UUID做主键或者是其他自然主键,如身份证号。
4、业务操作时,避免对主键的修改。

order by 优化:

--例子一
create index idx_age_phone on users(age,phone); --创建索引
-- 查询的数据要和索引一致,否则无效 order by 的参数属性也有和创建的顺序一致,否则只能生效第一个
EXPLAIN select id,phone,age from users order by age,phone
 
--例子二 ASC和DESC 排序也要一致。(mysql8.0以前,不支持ASC 和DESC )
create index idx_age_phone on users(age ASC,phone DESC)
EXPLAIN select id,age,phone from users ORDER BY age asc,phone desc

group by 优化

-- 创建索引,联合与否,看你需求
create index idx_profession_age on users(profession,age)
-- 注意,索引的顺序和你的用法要一直,否则无效
EXPLAIN select profession,age,count(*) num from users group by profession,age;

limit 优化(分页优化)

select * from users limit 1000000,10; -- 150w条数据 耗时 11.271s
-- 用主键id去分页,然后再通过id去查询对应的数据。 这里in不支持。
select u.* from users u, (select id from users limit 1100000,10) d where u.id = d.id; --50w条数据 耗时3.694

count() 优化。

select count(*) from users --目前innoDb 没有特殊的手段,如需优化,可以通过缓存或者自己计数的方式。

update 优化:

create index idx_name on users(name) --创建索引
begin;
update users set mark='xxx' where name ='张三'  --因为有索引,所以本次修改为行锁,否则就表锁
commit;

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

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

相关文章

Leetcode 1108. IP地址无效化 C++实现

Leetcode 1108. IP 地址无效化 问题&#xff1a;给你一个有效的 IPv4 地址address&#xff0c;返回这个 IP 地址的无效化版本。 所谓无效化 IP 地址&#xff0c;其实就是用 "[.]" 代替了每个 "."。 方法1&#xff1a;对字符串挨个进行判断&#xff0c;如…

java程序优化

Java程序的性能优化是一个复杂但非常重要的过程&#xff0c;它涉及多个方面。首先&#xff0c;我们需要识别性能瓶颈的具体位置&#xff0c;这通常可以通过性能分析工具&#xff08;如JProfiler, VisualVM等&#xff09;来完成。以下是一些通用的优化策略&#xff1a; 代码层面…

进程的创建与使用(win32-API)

一、前言 进程可以被视作操作系统中运行程序的一个实例&#xff0c;是系统资源分配和调度的基本单位。每一个进程都拥有自己独立的地址空间、一组状态信息&#xff08;如打开的文件、内存映射等&#xff09;&#xff0c;以及一个或多个线程来执行代码。进程之间的隔离性确保了…

飞睿智能家居人体微动感知雷达模组,宠物喂食器、LED灯控连续波雷达感应开关原理

在智能家居的浪潮中&#xff0c;飞睿智能人体微动感知雷达模组犹如一位“隐形守护者”&#xff0c;以其独特的连续波雷达感应开关原理&#xff0c;为我们带来更为智能、便捷的生活体验。今天&#xff0c;就让我们一起走进这一前沿科技&#xff0c;探索它是如何改变我们的生活。…

IOS 13 网络请求和Moya框架

允许HTTP请求 从iOS9开始&#xff0c;推荐使用HTTPS&#xff0c;如果使用的HTTP&#xff0c;默认情况下会出现如下错误&#xff1a; The resource could not be loaded because the App Transport Security policy requires the use of a secure connection. 这是因为iOS9引…

中俄联袂 助力前行 点燃希望——助残义诊在杭州邦尔骨科医院顺利举行

8月26日&#xff0c;由杭州市残疾人联合会主办、临平区残疾人联合会承办&#xff0c;杭州市邦尔骨科医院协办的“中俄联袂 助力前行 点燃希望”助残义诊活动在该院1号楼门诊大厅顺利进行。此次活动得到了俄罗斯伊里扎洛夫中心医院和杭州市邦尔骨科医院专家的大力支持。 本次义诊…

珈创生物业绩下滑:毛利率连年大降,产能利用率滑坡仍募资扩产

《港湾商业观察》廖紫雯 日前&#xff0c;武汉珈创生物技术股份有限公司&#xff08;以下简称&#xff1a;珈创生物&#xff09;于北交所证券交易中心披露招股书&#xff0c;保荐机构为国投证券。 珈创生物往年IPO进程可谓一波三折。2020年12月&#xff0c;公司曾申报沪交所科…

双向NAT应用场景和配置

域内双向NAT&#xff08;端口回流&#xff09; 局域网内有一台或多台服务器可能需要对外映射提供服务&#xff0c;如内网终端也需要访问&#xff0c;这时如终端通过映射后的公网地址访问会出现无法访问的情况&#xff0c;这时就需要域内双向NAT&#xff08;华三很多路由器会有…

window下kafka3启动多个

准备工作 我们先安装好kafka&#xff0c;并保证启动成功&#xff0c;可参考文章Windows下安装Kafka3-CSDN博客 复制kafka安装文件 kafka3已经内置了zookeeper&#xff0c;所以直接复制就行了 修改zookeeper配置文件 这里我们修改zookeeper配置文件&#xff0c;主要是快照地址…

学习分享:手把手教你使用Python开发一个api数据接口

今天想和大家分享一下Python开发语言&#xff0c;为什么选择Python&#xff0c;因为当今生活中人工智能无处不在&#xff0c;而开发人工智能的首选语言必是Python。今天教大家使用Python开发一个api接口。 Python的开发环境我使用的是PyCharm&#xff0c;安装完成之后创建项目…

单域名SSL证书快速获取指南

在当今互联网的社会&#xff0c;网站安全变得非常重要。SSL证书&#xff0c;作为实现网站HTTPS加密通信的重要手段&#xff0c;不仅能够保护用户数据传输的安全&#xff0c;还能提升网站的信任度和搜索引擎排名等。其中单域名SSL证书是可以保护单个域名的网站&#xff0c;这对于…

TensorBoard快速入门

一、简介 TensorBoard是一套 Web 应用程序&#xff0c;用于检查和了解 TensorFlow 运行和图形。简而言之&#xff0c;就是用于机器学习可视化的工具 TensorBoard 设计为完全离线运行&#xff0c;无需任何 Internet 访问权限。例如&#xff0c;这可能位于本地计算机上、公司防…

团队合作新风向:2024年8款协作工具榜单

文章介绍了以下几个团队协作工具&#xff1a;1. Worktile&#xff1b;2. PingCode&#xff1b;3. 飞书&#xff1b;4. 钉钉&#xff1b;5. Wrike&#xff1b;6. 云之家&#xff1b;7. Tapd&#xff1b;8. Slack。 在2024年&#xff0c;随着远程工作和分布式团队的普及&#xff…

从消费市场看电动汽车和充电桩互动关系

中国电动汽车充电基础设施促进联盟&#xff08;以下简称促进联盟&#xff09;日前发布的最新统计数据显示&#xff0c;7月全国新增公共充电桩8.8万台&#xff0c;同比增长45.2%&#xff0c;连续多月保持同比四成以上增长&#xff1b;今年前7个月全国充电基础设施增量为200.8万台…

MATLAB绘图基础1:MATLAB基础回顾

参考书&#xff1a;《 M A T L A B {\rm MATLAB} MATLAB与学术图表绘制》(关东升)。 1.MATLAB基础回顾 1.1 MATLAB语言特点 M A T L A B {\rm MATLAB} MATLAB是一种解释型语言&#xff0c;允许用户逐步执行命令并立即查看结果&#xff1b; M A T L A B {\rm MATLAB} MATLAB拥有…

1996-2022年各省农村用电量数据(无缺失)

1996-2022年各省农村用电量数据&#xff08;无缺失&#xff09; 1、时间&#xff1a;1996-2022年 2、来源&#xff1a;国家统计局、农村统计年鉴、电力企业联合会 3、指标&#xff1a;农村用电量 4、范围&#xff1a;31省 5、缺失情况&#xff1a;无缺失 6、指标说明&…

SAP与生产制造MPM系统集成案例

一、需求介绍 某公司为保证企业内部生产管理系统的多项基础数据的同步更新&#xff0c;确保各模块间信息的一致性和准确性&#xff0c;对后续的生产计划和物料管理打下基础&#xff0c;该公司将MPM系统和SAP系统经过SAP PO中间件集成平台进行了集成。MPM全称为Manufacturing…

面临快开学的孩子们,快看看莱莉是怎么利用数字时钟调整作息时间的吧!

网管小贾 / sysadm.cc “是谁订的西兰花匹萨&#xff1f;” “快吃我吧&#xff0c;我是有机的&#xff01;” 哦&#xff0c;糟糕&#xff01;莱莉昨晚又做恶梦了…… “不知道为什么&#xff0c;这几天总是翻来覆去的&#xff0c;莱莉看样子似乎不太走运&#xff01;” 厌…

Spark自定义函数例子

spark自定义函数&#xff0c;Spark sql 使用和dataFrame方式使用 #自定义函数名字 def convert_zdy(sex):return "男" if sex 1 else "女"if __name__ __main__:spark SparkSession.builder.master("local[*]").appName("自定义函数&qu…

PHP Vue学生档案管理系统:如何实现快速信息检索与数据安全?

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…