对SQL主键优化策略收录

1. 主键选择

  • 类型选择:主键应当尽可能短小且高效。通常推荐使用整数类型(如INT或更小的SMALLINTTINYINT),尤其是带有自增属性(AUTO_INCREMENT)的整数,这样既能保证唯一性,又能减少存储空间和提高查询效率。
  • 避免使用UUID:尽管UUID提供了全局唯一性,但其长度较大且无序,不利于索引存储和扫描。如果必须使用UUID,考虑将其哈希成较短的整数作为主键,或者将UUID存储在独立的列中,使用其他短整数作为主键。
  • 避免使用复合主键:除非业务场景确实需要,否则应避免使用多个字段构成的复合主键。单一字段主键更易于理解和管理,且索引占用空间较小。

2. 索引优化

  • 创建唯一索引:主键自动带有唯一性约束,并隐含创建了一个唯一索引。确保这个索引是有效的,且没有被其他因素(如碎片、统计信息过期等)影响其性能。
  • 避免不必要的主键修改:主键一旦确定,应尽量避免后续修改。主键变更可能导致大量相关索引、外键约束和数据分布的更新,产生高昂的代价。

3. 数据插入优化

  • 顺序插入:对于自增主键,新记录会被顺序地添加到数据文件末尾,这种物理顺序插入有助于减少页分裂和碎片,保持数据紧凑,提高写入效率。避免跳跃式的主键值插入。
  • 批量插入:使用批量插入(如INSERT INTO ... VALUES (...), (...), ...LOAD DATA INFILE)代替单条插入,减少事务开销和网络往返时间。

4. 分区与分片

  • 分区(适用于SQL Server等支持分区的数据库):对于超大型表,可以考虑根据主键进行水平分区,将数据分布在多个物理文件组或表空间中。这样可以将查询和DML操作限制在特定分区,减少IO开销和锁定范围。需谨慎设计分区键和分区策略,确保数据分布均匀,避免热点和数据倾斜。

5. 查询与JOIN优化

  • 避免全表扫描:确保查询和JOIN操作充分利用主键索引,避免不必要的全表扫描或临时表排序。在编写查询时,优先考虑基于主键的访问路径。
  • 覆盖索引:如果频繁进行只读查询且查询结果只包含主键及其所在表的部分列,尝试创建包含所需列的覆盖索引,减少回表操作。

6. 数据库配置与维护

  • 适当调整缓存大小:确保数据库缓存(如InnoDB缓冲池)足够大,能容纳常用主键索引,减少磁盘IO。
  • 定期维护:进行索引重建、碎片整理等维护操作,保持主键索引的高效性。

综上所述,优化SQL主键涉及主键类型的选取、索引的有效利用、数据插入策略、分区与分片技术、查询与JOIN优化,以及数据库配置与维护等多个层面。

了解更多知识请戳下:

@Author:懒羊羊

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

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

相关文章

Springboot实现链路追踪功能

前言 在日常开发中,一个业务的实现往往会调用很多个方法,当我们去看日志的时候,各种接口的日志打印出来,看着就头疼,压根没办法去定位,而链路追踪就能很好的帮助我们去查看接口从头至尾依次调用了哪些方法…

vue小程序跳转页面携带参数

跳转携带对象 前一个页面:跳转的方法里把数组转成字符串 gotoArea(item){console.log("item",item)let datas JSON.stringify(item);goto.goto(navigateTo,index/area/main?itemdatas);},跳转的目标页面: onLoad(options){let datas JSO…

MacOS13搭建安卓逆向环境

MacOS中用apktool解包 这里是所有链接:123云盘下载 https://www.123pan.com/s/9QRqVv-JE7Y.html安装apktool https://apktool.org/docs/install/ 或者下载单独的jar包 brew install wgethttps://apktool.org/blog/apktool-2.9.3下载直链:https://co…

ChatGPT让论文写作更高效,让学术研究更精彩

ChatGPT无限次数:点击直达 ChatGPT让论文写作更高效,让学术研究更精彩 引言 在当今数字化时代,人工智能技术的发展为学术研究者提供了更多创新的机会和工具。其中,自然语言处理模型如ChatGPT在论文写作领域展现出强大的潜力。本文将介绍如何…

数据仓库—大数据建模

大数据建模是一个关键的环节,它直接影响到数据仓库的设计和运行效果。下面将详细介绍一下大数据建模的一般步骤和关键概念。 建模步骤 需求分析:首先要对业务需求进行深入分析,了解业务的核心目标和数据分析的重点。只有明确了需求&#xff…

spring的事件推送

本质上是设计模式中的观察者模式。 一、什么是观察者模式 观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。 二、什么是spring的事件推送 在 Spring 的事…

使用Python批量将PDF转Word

简述 以下全部代码无法完美对图片、表格等非文字形式的内容转化。要较好的效果需要使用光学字符分析等方法进行转化 我懒,不想将代码模块拆分出来写注释 除代码1中有详细注释外,剩下的代码仅在关键部分进行注释 代码1:小规模文件的转换 代码…

TikTok如何矩阵养号?TK防关联引流系统助力TK账号安全运营

TK是 TikTok旗下的短视频社交媒体,平台目前是全球最火的短视频平台,目前全球活跃用户已经超过8亿。其中 TikTok的用户已经达到8亿。TK这款短视频社交媒体平台在海外的发展潜力非常大,也是国内很多人的创业目标,很多人都想从 TK这个…

如何将arping以及所有依赖打包安装到另外一台离线ubuntu机器

ubuntu系统下可以使用arping命令检测局域网内一些ip是否冲突,使用方式为: arping xx.xx.xx.xx 在线情况下,可以使用下面命令下载arping,然后使用即可 apt install arping 但是有些情况下机器可能不能上网,这时就需要将…

文件上传阿里云OSS准备工作及入门程序(保姆级手把手教你)

使用阿里云作为第三方,来存储文件。 登录阿里云官网,开通对象存储OSS 这样就开通成功了。点击 管理控制台 ,出现下面页面。 不过我们也可以不充值购买,先叉掉,它有30天试用的。 创建Bucket 点这个创建Bucket。 创建存…

[论文笔记] Pai-megatron Qwen1.5-14B-CT 后预训练 踩坑记录

1. 模型权重转换报错 hf2mcore_1.5_v2.py 报错为: /mnt/cpfs/kexin/dlc_code/qwen1.5/PAI-Megatron-Patch/toolkits/model_checkpoints_convertor/qwen/hf2mcore_1.5_v2.py 正确文件替换如下,更改了477行,删除了 args.hidden_size 这个维度,在tp>1时也支持转换: eli…

TCM SRAM等五块内存的使用和动态分配

TCM SRAM等五块内存的使用和动态分配 配置sct文件内存使用动态内存分配rtx_lib.hrtx_memory.cmain.c 配置sct文件 LR_IROM1 0x08000000 0x00200000 { ; load region size_regionER_IROM1 0x08000000 0x00200000 { ; load address execution address*.o (RESET, First)*(InRoo…

Spring Boot 学习(4)——开发环境升级与项目 jdk 升级

各种版本都比较老,用起来也是常出各样的问题,终于找到一个看来不错的新教程,是原先那个教程的升级。遂决定升级一下开发环境,在升级遇到一些问题,摸索将其解决,得些体会记录备查。 最终确定开发环境约束如下…

蓝桥杯基础18——第13届省赛真题与代码详解

目录 0.心得体会 1.题目如下 2.代码实现的思路 键值扫描 数码管窗口切换 数码管的动态扫描 继电器工作时L3闪烁,整点时刻L1灯光亮5秒 3.变量列表 定义的常量和数组 功能控制和状态变量 定时器和计数变量 4.代码参考 4.1 头文件 onewire.h ds1302.h 4…

gpu服务器与cpu服务器的区别在哪?

GPU服务器与CPU服务器的区别主要体现在处理能力、应用场景、能源消耗和成本等方面。 处理能力:CPU(中央处理器)是计算机的“大脑”,负责执行指令和处理数据,它的设计注重于逻辑运算和串行处理能力。而GPU(…

全球媒体发稿:海外发稿数字期刊Digital Journal

全球媒体发稿:海外发稿数字期刊Digital Journal ​官网: digitaljournal.com 数字期刊,加拿大知名门户,月访量超过30万。 是一个全球媒体平台和内容合作伙伴,通过捕捉和报道第一,提升新闻周期中的声…

FTP超大文件下载入库--断点续传发

我的需求是将ftp上面的文件进行下载入库,文件大概有两万多个文本,大概是36G,六张表总共2亿数据量。 过程中遇到的错误 Connection closed without indication. 错误1 421 Could not create socket . 错误2 原因:应该是下载文…

文件上传【2】--靶场通关

1.前端禁用js绕过 上传文件,进行抓包,没有抓到,说明这里的验证是前端js验证跳出的弹窗 禁用js后,php文件上传成功。 2.文件上传.htaccess 上传png木马后连接不上 代码中存在.htaccess,判断此时应该就是需要用到.htac…

【通信原理笔记】【三】——3.7 频分复用

文章目录 前言一、时分复用(TDM)二、频分复用(FDM)总结 前言 现在我们学习了几种调制模拟基带信号的方法,这些调制方法可以将基带信号搬移到频带进行传输。那么如果采用不同的载波频率把多个基带信号搬移到不同的频带…

机器学习-09-图像处理02-PIL+numpy+OpenCV实践

总结 本系列是机器学习课程的系列课程,主要介绍机器学习中图像处理技术。 参考 【人工智能】PythonOpenCV图像处理(一篇全) 一文讲解方向梯度直方图(hog) 【杂谈】计算机视觉在人脸图像领域的十几个大的应用方向&…