数据库优化sql的方案

news2024/11/26 5:45:07

一: 插入数据的优化

1.insert

如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优化

  • 优化方案一
批量插入数据
Insert into tb_test values(1,'Tom'),(2,'Cat'),(3,'Jerry'); 
  • 优化方案二

start transaction;
insert into tb_test values(1,'Tom'),(2,'Cat'),(3,'Jerry');
insert into tb_test values(4,'Tom'),(5,'Cat'),(6,'Jerry');
insert into tb_test values(7,'Tom'),(8,'Cat'),(9,'Jerry');
commit;
  • 优化方案三

主键顺序插入,性能要高于乱序插入,由于B+树的原因,可以减轻检索重量,减低检索速度

主键乱序插入 : 8 1 9 21 88 2 4 15 89 5 7 3

主键顺序插入 : 1 2 3 4 5 7 8 9 15 21 88 89


2 大批量插入数据

一次性需要插入大批量数据(比如: 几百万的记录),使用insert语句插入性能较低,此时可以使用MySQL数据库提供的load指令进行插入

-- 客户端连接服务端时,加上参数 -–local-infile
mysql –-local-infile -u root -p
-- 设置全局参数local_infile为1,开启从本地加载文件导入数据的开关
set global local_infile = 1;
-- 执行load指令将准备好的数据,加载到表结构中
load data local infile '/root/sql1.log' into table tb_user fields terminated by ',' lines terminated by '\n' ;

二: 主键优化

在load时,主键顺序插入性能高于乱序插入

1. 数据组织方式

在InnoDB存储引擎中,表数据都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表

2. 页分裂

页可以为空,也可以填充一半,也可以填充100%,每个页包含了2-N行数据(如果一行数据过大,会行溢出),根据主键排列

  • 顺序插入:没有也分裂的现象

  • 乱序插入:出现页分裂

过程:当乱序插入,该页已经满了,但是我们还要插入数据的时候,将50%的数据移动到新页取,将数据插入以后,再建立新的连接

3. 页合并

当删除一行记录时,实际上记录并没有被物理删除,只是记录被标记(flaged)为删除并且它的空间变得允许被其他记录声明使用

过程:删除数据达到阈值的时候会进行合并页

4. 索引设计原则

  • 满足业务需求的情况下,尽量降低主键的长度

  • 插入数据时,尽量选择顺序插入,选择使用AUTO_INCREMENT自增主键

  • 尽量不要使用UUID做主键或者是其他自然主键,如身份证号

  • 业务操作时,避免对主键的修改

三: order by优化

  • Using filesort:

通过表的索引或全表扫描,读取满足条件的数据行,,然后在排序缓冲区sort buffer中完成排序操作,所有不是通过索引直接返回排序结果的排序都叫FileSort排序

  • Using index:

通过有序索引顺序扫描直接返回有序数据,这种情况即为usingindex,不需要额外排序,操作效率高

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

  • B. 尽量使用覆盖索引,否则造成回表查询降低了查询速度

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

  • D. 如果不可避免的出现filesort,大数据量排序时,可以适当增大排序缓冲区大小 sort_buffer_size(默认256k)

四:group by优化

  • A. 在分组操作时,可以通过索引来提高效率

  • B. 分组操作时,索引的使用也是满足最左前缀法则的

五:limit优化

在数据量比较大时,如果进行limit分页查询,在查询时,越往后,分页查询效率越低。

优化思路:

一般分页查询时,通过创建 覆盖索引 能够比较好地提高性能,可以通过覆盖索引加子查询形式进行优化

explain select * from tb_sku t , (select id from tb_sku order by id
limit 2000000,10) a where t.id = a.id;

六:count优化

  • MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高; 但是如果是带条件的count,MyISAM也慢。

  • InnoDB 引擎就麻烦了,它执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数

如果说要大幅度提升InnoDB表的count效率,主要的优化思路:自己计数(可以借助于redis这样的数据库进行,但是如果是带条件的count又比较麻烦了)

 

七:update优化

InnoDB的行锁是针对索引加的锁,不是针对记录加的锁 ,并且该索引不能失效,否则会从行锁升级为表锁 

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

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

相关文章

qwen2 vllm推理部署;openai接口调用

参考: https://qwenlm.github.io/zh/blog/qwen2/ 下载 https://huggingface.co/Qwen 下载的Qwen2-7B-Instruct使用: export HF_ENDPOINT=https://hf-mirror.comhuggingface-cli download --resume-download --local-dir-use-symlinks False Qwen/Qwen2-7B-Instruct

webpack 优化构建速度的插件

1.HardSourceWebpackPlugin本地缓存 HardSourceWebpackPlugin这个插件比DLL动态链接库更优秀 HardSourceWebpackPlugin是webpack的插件,为模块提供中间缓存步骤。为了查看结果,您需要使用此插件运行webpack两次:第一次构建将花费正常的时间…

mysql中事务的简介

大家好。我们在日常开发过程中肯定都或多或少的用到过事务,而且在面试时,数据库的事务也是必问内容之一。今天我们就来说说mysql的事务。 为了方便我们下面内容的讲解,我们也先建立一个讲事务必用的表–account表,并在表中插入两…

zoomeye api报错 request invalid, validate usage and try again

项目场景: 调用zoomeye的api接口进行数据拿取 问题描述 之前接口一直通着今天突然报错,以下为源代码 pip install zoomeye from zoomeye.sdk import ZoomEye zm ZoomEye(api_key"34A8B452-D874-C63E0-8471-F3D4f89766f") zm.dork_search(a…

Python 将CSV文件转为PDF文件

CSV文件通常用于存储大量的数据,而PDF文件则是一种通用的文档格式,便于与他人共享和打印。将CSV文件转换成PDF文件可以帮助我们更好地管理和展示数据。本文将介绍如何通过Python编程将CSV文件导出为PDF文件。 Python Excel库安装及介绍 在 Python 中&am…

《手把手教你》系列练习篇之12-python+ selenium自动化测试(详细教程)

1. 简介 前面文章我们了解了如何获取元素的text属性值,和判断元素是否显示在页面(is_displayed()方法),本文我们来学习下,判断一个控件是否被选中状态、获取页面元素的大小、组合键-全选文字、组合键-退格键删除文本和…

农业乡村振兴,绿意盎然谱新篇

乡村振兴,不仅是经济的繁荣,更是文化的传承和生态的保护。让我们以更加饱满的热情,投身到乡村建设中来,助力农业现代化,提升农村居民生活品质。 农业乡村振兴的吴总说:在这片热土上,农业承载着国…

简单聊聊大数据分析的方法有什么

大数据分析是指对规模巨大的数据集合进行的分析过程。 这些数据集合通常具有以下几个特点,可以概括为5个V: 1.数据量大(Volume):大数据分析处理的数据量巨大,远远超出了传统数据处理软件的能力范围。 2.…

Diffusers代码学习: IP-Adapter

从操作的角度来看,IP-Adapter和图生图是很相似的,都是有一个原始的图片,加上提示词,生成目标图片。但它们的底层实现方式是完全不一样的,我们通过源码解读来看一下。以下是ip adapter的实现方式 # 以下代码为程序运行…

语音降噪算法库介绍

一.语音降噪技术方向介绍 软件上进行语音降噪目前主要是两个方向:传统降噪算法和AI降噪算法,他们各有千秋,目前看他们各有千秋,有各自适用场景。 推荐一个不错的人工智能学习网站,通俗易懂,内容全面&#…

【Python报错】已解决AttributeError: list object has no attribute items ( Solved )

解决Python报错:AttributeError: list object has no attribute ‘items’ (Solved) 在Python中,AttributeError通常表示你试图访问的对象没有你请求的属性或方法。如果你遇到了AttributeError: list object has no attribute items的错误,这…

Si3N4/SiC纳米复相陶瓷综合性能明显提升 下游可应用范围广泛

Si3N4/SiC纳米复相陶瓷综合性能明显提升 下游可应用范围广泛 Si3N4/SiC纳米复相陶瓷,是以碳化硅(SiC)纳米颗粒为第二相,弥散进入氮化硅(Si3N4)基体相制备得到的新型陶瓷材料,对碳化硅陶瓷具有强…

【AIOT-Robot】3D pos 相关

1. Mediapipe 3D detection 使用移动增强现实(AR)会话数据(session data),开发了新的数据pipeline。大部分智能手机现在都具备了增强现实的功能,在这个过程中捕捉额外的信息,包括相机姿态、稀疏的3D点云、估计的光照和平面。 利用相机的姿势、检测到的平面、估计的照明,来生…

从LangChain迈出学习人工智能第一步入门指南

什么是langchain LangChain是一个用于开发由语言模型驱动的应用程序的框架,致力于简化AI模型应用的开发.简单来说,langchain就是一个帮助开发者轻松完成AI模型应用开发的框架,现在支持python和js两个版本,它集成多种大语言模型及第三方api. 对于使用langchain,把它当作一个第三…

禁用layui树形表格的多选框checkbox

1. 背景 在使用树形表格渲染数据时,需要对数据进行批量操作。相对于选中数据后,再做错误提示。直接把数据的多选框禁用掉更加直观。 2. 实现 DisabledTableCheckBox: () > {// 获取所有行 var tableElem $(".layui-table-fixed-l");var …

Vue3+vite部署nginx的二级目录,使用hash模式

修改router访问路径 import { createRouter, createWebHashHistory } from vue-routerconst router createRouter({history: createWebHashHistory (/mall4pc-bbc/),routes: [XXX,] })配置package.json文件 "build:testTwo": "vite build --mode testing --ba…

【管理咨询宝藏128】埃森哲大型制造型集团五年发展战略规划项目规划方案

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏128】ACC大型制造型集团五年发展战略规划项目规划方案 【格式】PDF版本 【关键词】战略规划、制造型企业、埃森哲 【核心观点】 - 中国消费者正…

5G发牌五周年丨移远通信:全面发力,加快推进5G技术服务社会发展

2024年6月6日,正值中国5G商用牌照发牌五周年。根据移动通信“十年一代”的规律,5G已走过一半征程。在过去的五年时间里,5G技术从萌芽到成熟,深刻改变了工业、农业、医疗及消费端等各个领域的发展脉络。无论是无人机配送、自动驾驶…

PMP学习和考试难度分析

PMP(项目管理专业人士)考试目前是全球范围内比较具权威性和认可度的项目管理证书之一。因此PMP考试的难度是一个备受关注的话题。根据我们以往的学员经验我从不同角度解析PMP考试的难度,并提供一些应对挑战的建议。希望对大家有所帮助。 PMP考…

自动识别水位预警摄像机

自动识别水位预警摄像机是现代城市水域安全管理的重要组成部分。这种摄像机具有多项功能,使其在水位监测和异常情况识别方面发挥关键作用。 其高清摄像头能够捕捉水位变化的细节,提供精确的监控画面。这意味着即使是微小的水位变化也能被及时发现和记录。…