Mysql使用中的性能优化——索引数对INSERT性能的影响

表的索引可以给数据检索提升效率,但是也给表的增删改操作带来代价。本文我们将关注,索引数量对INSERT操作的影响。

结论

索引数的新增会造成INSERT操作效率下降,约每增一个索引会降低10%效率。

实验数据

在这里插入图片描述
可以看到0个索引的效率是7个索引效率的一倍。

测试环境

见《Mysql使用中的性能优化——搭建Mysql的监测服务》

测试代码

DROP DATABASE IF EXISTS testdb;
CREATE DATABASE IF NOT EXISTS testdb;
USE testdb;DROP TABLE IF EXISTS test_insert_src;
CREATE TABLE test_insert_src (id SERIAL PRIMARY KEY,name TEXT,name1 TEXT,name2 TEXT,name3 TEXT,name4 TEXT,name5 TEXT,name6 TEXT,name7 TEXT,name8 TEXT,name9 TEXT
) engine=InnoDB;DROP TABLE IF EXISTS test_insert_0_index;
CREATE TABLE test_insert_0_index (id SERIAL PRIMARY KEY,name TEXT,name1 TEXT,name2 TEXT,name3 TEXT,name4 TEXT,name5 TEXT,name6 TEXT,name7 TEXT,name8 TEXT,name9 TEXT
) engine=InnoDB;DROP TABLE IF EXISTS test_insert_1_index;
CREATE TABLE test_insert_1_index (id SERIAL PRIMARY KEY,name TEXT,name1 TEXT,name2 TEXT,name3 TEXT,name4 TEXT,name5 TEXT,name6 TEXT,name7 TEXT,name8 TEXT,name9 TEXT,INDEX name_index (name(32))
) engine=InnoDB;DROP TABLE IF EXISTS test_insert_2_index;
CREATE TABLE test_insert_2_index (id SERIAL PRIMARY KEY,name TEXT,name1 TEXT,name2 TEXT,name3 TEXT,name4 TEXT,name5 TEXT,name6 TEXT,name7 TEXT,name8 TEXT,name9 TEXT,INDEX name_index (name(32)),INDEX name1_index (name1(32))
) engine=InnoDB;DROP TABLE IF EXISTS test_insert_3_index;
CREATE TABLE test_insert_3_index (id SERIAL PRIMARY KEY,name TEXT,name1 TEXT,name2 TEXT,name3 TEXT,name4 TEXT,name5 TEXT,name6 TEXT,name7 TEXT,name8 TEXT,name9 TEXT,INDEX name_index (name(32)),INDEX name1_index (name1(32)),INDEX name2_index (name2(32))
) engine=InnoDB;DROP TABLE IF EXISTS test_insert_4_index;
CREATE TABLE test_insert_4_index (id SERIAL PRIMARY KEY,name TEXT,name1 TEXT,name2 TEXT,name3 TEXT,name4 TEXT,name5 TEXT,name6 TEXT,name7 TEXT,name8 TEXT,name9 TEXT,INDEX name_index (name(32)),INDEX name1_index (name1(32)),INDEX name2_index (name2(32)),INDEX name3_index (name3(32))
) engine=InnoDB;DROP TABLE IF EXISTS test_insert_5_index;
CREATE TABLE test_insert_5_index (id SERIAL PRIMARY KEY,name TEXT,name1 TEXT,name2 TEXT,name3 TEXT,name4 TEXT,name5 TEXT,name6 TEXT,name7 TEXT,name8 TEXT,name9 TEXT,INDEX name_index (name(32)),INDEX name1_index (name1(32)),INDEX name2_index (name2(32)),INDEX name3_index (name3(32)),INDEX name4_index (name4(32))
) engine=InnoDB;DROP TABLE IF EXISTS test_insert_6_index;
CREATE TABLE test_insert_6_index (id SERIAL PRIMARY KEY,name TEXT,name1 TEXT,name2 TEXT,name3 TEXT,name4 TEXT,name5 TEXT,name6 TEXT,name7 TEXT,name8 TEXT,name9 TEXT,INDEX name_index (name(32)),INDEX name1_index (name1(32)),INDEX name2_index (name2(32)),INDEX name3_index (name3(32)),INDEX name4_index (name4(32)),INDEX name5_index (name5(32))
) engine=InnoDB;DROP TABLE IF EXISTS test_insert_7_index;
CREATE TABLE test_insert_7_index (id SERIAL PRIMARY KEY,name TEXT,name1 TEXT,name2 TEXT,name3 TEXT,name4 TEXT,name5 TEXT,name6 TEXT,name7 TEXT,name8 TEXT,name9 TEXT,INDEX name_index (name(32)),INDEX name1_index (name1(32)),INDEX name2_index (name2(32)),INDEX name3_index (name3(32)),INDEX name4_index (name4(32)),INDEX name5_index (name5(32)),INDEX name6_index (name6(32))
) engine=InnoDB;DROP TABLE IF EXISTS test_insert_8_index;
CREATE TABLE test_insert_8_index (id SERIAL PRIMARY KEY,name TEXT,name1 TEXT,name2 TEXT,name3 TEXT,name4 TEXT,name5 TEXT,name6 TEXT,name7 TEXT,name8 TEXT,name9 TEXT,INDEX name_index (name(32)),INDEX name1_index (name1(32)),INDEX name2_index (name2(32)),INDEX name3_index (name3(32)),INDEX name4_index (name4(32)),INDEX name5_index (name5(32)),INDEX name6_index (name6(32)),INDEX name7_index (name7(32))
) engine=InnoDB;DROP TABLE IF EXISTS test_insert_9_index;
CREATE TABLE test_insert_9_index (id SERIAL PRIMARY KEY,name TEXT,name1 TEXT,name2 TEXT,name3 TEXT,name4 TEXT,name5 TEXT,name6 TEXT,name7 TEXT,name8 TEXT,name9 TEXT,INDEX name_index (name(32)),INDEX name1_index (name1(32)),INDEX name2_index (name2(32)),INDEX name3_index (name3(32)),INDEX name4_index (name4(32)),INDEX name5_index (name5(32)),INDEX name6_index (name6(32)),INDEX name7_index (name7(32)),INDEX name8_index (name8(32))
) engine=InnoDB;DROP TABLE IF EXISTS test_insert_10_index;
CREATE TABLE test_insert_10_index (id SERIAL PRIMARY KEY,name TEXT,name1 TEXT,name2 TEXT,name3 TEXT,name4 TEXT,name5 TEXT,name6 TEXT,name7 TEXT,name8 TEXT,name9 TEXT,INDEX name_index (name(32)),INDEX name1_index (name1(32)),INDEX name2_index (name2(32)),INDEX name3_index (name3(32)),INDEX name4_index (name4(32)),INDEX name5_index (name5(32)),INDEX name6_index (name6(32)),INDEX name7_index (name7(32)),INDEX name8_index (name8(32)),INDEX name9_index (name9(32))
) engine=InnoDB;DROP PROCEDURE IF EXISTS test_insert_proc_batch_bulk;
DELIMITER //
CREATE PROCEDURE test_insert_proc_batch_bulk(IN name TEXT, IN fromNum INT, IN toNum INT)
BEGINDECLARE i INT DEFAULT fromNum;DECLARE j INT DEFAULT 0;DECLARE new_names TEXT DEFAULT '';DECLARE nameList TEXT DEFAULT '';SET @sql = 'INSERT INTO test_insert_src (name, name1, name2, name3, name4, name5, name6, name7, name8, name9) VALUES ';WHILE i < toNum DOSET nameList = '';SET j = 0;while j < 10 DOSET new_names = CONCAT(name, i, "_", j);IF j = 0 THENSET nameList = CONCAT(nameList, '"', new_names, '"');ELSESET nameList = CONCAT(nameList, ',"', new_names, '"');END IF;SET j = j + 1;END WHILE;SET i = i + 1;SET @sql = CONCAT(@sql, '(', nameList, '),');END WHILE;SET @sql = LEFT(@sql, LENGTH(@sql) - 1);PREPARE stmt FROM @sql;EXECUTE stmt;DEALLOCATE PREPARE stmt;COMMIT;
END //
DELIMITER ;DROP PROCEDURE IF EXISTS test_insert_proc_batch;
DELIMITER //
CREATE PROCEDURE test_insert_proc_batch(IN name TEXT, IN count INT, IN step INT)
BEGINDECLARE i INT DEFAULT 0;WHILE i < count DOCALL test_insert_proc_batch_bulk(name, i, i + step);SET i = i + step;END WHILE;COMMIT;
END //
DELIMITER ;TRUNCATE TABLE test_insert_src;
CALL test_insert_proc_batch('test', 1000000, 5000);TRUNCATE TABLE test_insert_0_index;
INSERT INTO test_insert_0_index (name, name1, name2, name3, name4, name5, name6, name7, name8, name9) SELECT name, name1, name2, name3, name4, name5, name6, name7, name8, name9 FROM test_insert_src;  TRUNCATE TABLE test_insert_1_index;
INSERT INTO test_insert_1_index (name, name1, name2, name3, name4, name5, name6, name7, name8, name9) SELECT name, name1, name2, name3, name4, name5, name6, name7, name8, name9 FROM test_insert_src;TRUNCATE TABLE test_insert_2_index;
INSERT INTO test_insert_2_index (name, name1, name2, name3, name4, name5, name6, name7, name8, name9) SELECT name, name1, name2, name3, name4, name5, name6, name7, name8, name9 FROM test_insert_src;TRUNCATE TABLE test_insert_3_index;
INSERT INTO test_insert_3_index (name, name1, name2, name3, name4, name5, name6, name7, name8, name9) SELECT name, name1, name2, name3, name4, name5, name6, name7, name8, name9 FROM test_insert_src;TRUNCATE TABLE test_insert_4_index;
INSERT INTO test_insert_4_index (name, name1, name2, name3, name4, name5, name6, name7, name8, name9) SELECT name, name1, name2, name3, name4, name5, name6, name7, name8, name9 FROM test_insert_src;TRUNCATE TABLE test_insert_5_index;
INSERT INTO test_insert_5_index (name, name1, name2, name3, name4, name5, name6, name7, name8, name9) SELECT name, name1, name2, name3, name4, name5, name6, name7, name8, name9 FROM test_insert_src;TRUNCATE TABLE test_insert_6_index;
INSERT INTO test_insert_6_index (name, name1, name2, name3, name4, name5, name6, name7, name8, name9) SELECT name, name1, name2, name3, name4, name5, name6, name7, name8, name9 FROM test_insert_src;TRUNCATE TABLE test_insert_7_index;
INSERT INTO test_insert_7_index (name, name1, name2, name3, name4, name5, name6, name7, name8, name9) SELECT name, name1, name2, name3, name4, name5, name6, name7, name8, name9 FROM test_insert_src;TRUNCATE TABLE test_insert_8_index;
INSERT INTO test_insert_8_index (name, name1, name2, name3, name4, name5, name6, name7, name8, name9) SELECT name, name1, name2, name3, name4, name5, name6, name7, name8, name9 FROM test_insert_src;TRUNCATE TABLE test_insert_9_index;
INSERT INTO test_insert_9_index (name, name1, name2, name3, name4, name5, name6, name7, name8, name9) SELECT name, name1, name2, name3, name4, name5, name6, name7, name8, name9 FROM test_insert_src;TRUNCATE TABLE test_insert_10_index;
INSERT INTO test_insert_10_index (name, name1, name2, name3, name4, name5, name6, name7, name8, name9) SELECT name, name1, name2, name3, name4, name5, name6, name7, name8, name9 FROM test_insert_src;

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

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

相关文章

Java Web学习笔记21——前后端分离开发

前后端混合开发&#xff1a; 沟通成本比较高。 分工不明确。 不便管理&#xff0c;不便于后期的维护和拓展。 前后端分离开发&#xff1a; 当前主流的开发模式&#xff1a;前后端分离开发&#xff1a; 接口文档&#xff1a; 接口并不是interface。 接口指的是业务功能。 …

Wireshark自定义Lua插件

背景&#xff1a; 常见的抓包工具有tcpdump和wireshark&#xff0c;二者可基于网卡进行抓包&#xff1a;tcpdump用于Linux环境抓包&#xff0c;而wireshark用于windows环境。抓包后需借助包分析工具对数据进行解析&#xff0c;将不可读的二进制数转换为可读的数据结构。 wires…

element-plus的el-text组件(文本组件)的介绍和使用

el-text&#xff08;适合文本操作的组件&#xff09; 设置文本type,如default,primary,success,info,warning,danger超出容器尺寸自动省略&#xff0c;tuncated属性设置size属性控制文本大小&#xff0c;有large,default,small设置tag属性&#xff0c;值为html5标签名&#xf…

Nagios的安装和使用

*实验* *nagios安装和使用* Nagios 是一个监视系统运行状态和网络信息的监视系统。Nagios 能监视所指定的本地或远程主机以及服务&#xff0c;同时提供异常通知功能等. Nagios 可运行在 Linux/Unix 平台之上&#xff0c;同时提供一个可选的基于浏览器的 WEB 界面以方便系统管…

【创作活动】面对层出不穷的AI大模型产品我们应该怎么选择?

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

Vue CLI 4与项目构建实战指南

title: Vue CLI 4与项目构建实战指南 date: 2024/6/9 updated: 2024/6/9 excerpt: 这篇文章介绍了如何使用Vue CLI优化项目构建配置&#xff0c;提高开发效率&#xff0c;涉及配置管理、项目部署策略、插件系统定制以及Webpack和TypeScript的深度集成技巧。 categories: 前端…

五、身份与访问管理—身份管理和访问控制管理(CISSP)

目录 1.身份管理 1.1 目录技术 1.2 单点登录 1.2.1 Kerberos认证 1.2.2 SESAME认证 1.2.3 KryptoKnight认证 1.3 联合身份管理 1.3.1 SAML安全断言标记语言 1.3.2 标记语言 1.3.3 OpenID 1.3.4 OAuth 1.3.5 OIDC(OpenID Connect) 2.身份即服务(IDaaS) 2.1 AA…

Rocky linux 搭建DNS主从服务器+keepalived实现高可用

接上两篇文章&#xff0c;这篇文章跟上两篇没有直接关系。 第一篇&#xff1a;linux rocky 搭建DNS服务和禁止AD域控DNS&#xff0c;做到独立DNS并加域_linux 域控-CSDN博客文章浏览阅读519次&#xff0c;点赞20次&#xff0c;收藏10次。使用linux rocky 搭建DNS服务&#xff…

【个人博客搭建】(22)申请QQ开发者

这里我们要引入的一个概念是OAuth - OAuth 2.0是一个行业标准的授权协议&#xff0c;用于处理用户数据访问和分享的安全问题。它允许用户将他们对某些服务的访问权限授权给第三方应用&#xff0c;而无需分享他们的用户名和密码。以下是对OAuth 2.0的介绍&#xff1a; 基本概念 …

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:中国舰船研究院

中国舰船研究院又称中国船舶重工集团公司第七研究院&#xff0c;隶属于中国船舶重工集团公司&#xff0c;是专门从事舰船研究、设计、开发的科学技术研究机构&#xff0c;是中国船舶重工集团公司的军品技术研究中心、科技开发中心&#xff1b;主要从事舰船武器装备发展战略研究…

PDF编辑与转换的终极工具智能PDF处理Acrobat Pro DC

Acrobat Pro DC 2023是一款功能全面的PDF编辑管理软件&#xff0c;支持创建、编辑、转换、签署和共享PDF文件。它具备OCR技术&#xff0c;可将扫描文档转换为可编辑文本&#xff0c;同时提供智能PDF处理技术&#xff0c;确保文件完整性和可读性。此外&#xff0c;软件还支持电子…

竞拍商城系统源码后端PHP+前端UNIAPP

下载地址&#xff1a;竞拍商城系统源码后端PHP前端UNIAPP

手把手教你入门vue+springboot开发(二)

文章目录 前言一、开发环境搭建二、创建项目三、编写代码1.插件下载2.编写代码 四、测试验证总结 前言 前面我们构建了一个查询用户信息的简单springboot后端demo&#xff0c;今天我们先搭建VSCodevue的开发环境&#xff0c;然后在这个开发环境上构建一个demo&#xff0c;连接…

肠道病原体感染定植的三个关键角色——炎症、营养与共生菌群

谷禾健康 日常生活中大部分人都可能碰到过食用了不卫生或过期变质食物以及水源后&#xff0c;出现过恶心、腹痛&#xff0c;并伴有腹泻、食欲不振、呕吐等症状&#xff1f;如果有就要当心&#xff0c;这可能是病原体感染引起的胃肠道炎症。 但是&#xff0c;即使食用了同样食物…

mysql中 redo日志(下)

大家好。上篇文章我们介绍了什么是redo日志以及redo日志的写入过程。建议没看过上篇文章的同学先看一下上一篇文章&#xff0c;今天我们继续来说一说redo日志。 一、redo日志文件 1. redo日志刷盘时机 我们知道mtr运行过程中产生的一组redo日志在mtr结束时会被复制到log buf…

从VS Code源码看清晰代码之美

VS Code的产品做的很优秀&#xff0c;其源码也质量颇高&#xff0c;清晰、整洁、富有美感。 下面是 src\vs\workbench\common\notifications.ts 文件中的两段代码&#xff0c;大家感受一下&#xff1a; get sticky(): boolean {if (this._sticky) {return true; // explicitl…

冲刺面试加油

1、HTML语义化&#xff1f; 对于开发者而言&#xff0c;语义化标签有着更好的页面结构&#xff0c;有利于代码的开发编写和后期的维护。 对于用户而言&#xff0c;当网络卡顿时有良好的页面结构&#xff0c;有利于增加用户的体验。 对于爬虫来说&#xff0c;有利于搜索引擎的…

所谓自律,就是去对抗那些廉价的快乐

所谓自律&#xff0c;就是去对抗那些廉价的快乐 以下文章来源于洞见 &#xff0c;作者洞见 导语 打败内心那只及时享乐的猴子。 董宇辉说过这样一句话&#xff1a;“廉价的快乐是直接给你想要的东西&#xff0c;高等的快乐则会给你设置重重阻碍。” 廉价的快乐&#xff0c;就…

Huggingface的Transformer库经验总结

文章目录 transformerstransformers.Trainertrain()tr_loss self.training_step(model, inputs)dagn的forward中逐步计算损失函数 transformers transformers.Trainer class Trainer:#这段代码根据训练数据集的类型和硬件环境&#xff0c;选择适当的采样器来处理数据集。def…

【免费Web系列】大家好 ,今天是Web课程的第十七天点赞收藏关注,持续更新作品 !

这是Web第一天的课程大家可以传送过去学习 http://t.csdnimg.cn/K547r SpingBoot原理 在前面十多天的课程当中&#xff0c;我们学习的都是web开发的技术使用&#xff0c;都是面向应用层面的&#xff0c;我们学会了怎么样去用。而我们今天所要学习的是web后端开发的最后一个篇…