当前位置: 首页 > news >正文

索引小tips

一、优化原则

关于创建索引:

1. 【强制】InnoDB表必须主键为id int/bigint auto_increment,且主键值禁⽌被更新 。

2. 【强制】InnoDB和MyISAM存储引擎表,索引类型必须为 BTREE 。 

3. 【建议】主键的名称以 pk 开头,唯⼀键以 uni 或 uk 开头,普通索引以 idx 开头,⼀律 使⽤⼩写格式,以字段的名称或缩写作为后缀。

4. 【建议】多单词组成的columnname,取前⼏个单词⾸字⺟,加末单词组成column_name。如: sample 表 member_id 上的索引:idx_sample_mid。

5. 【建议】单个表上的索引个数不能超过6个 。

6. 【建议】在建⽴索引时,多考虑建⽴联合索引 ,并把区分度最⾼的字段放在最前⾯。

7. 【建议】在多表 JOIN 的SQL⾥,保证被驱动表的连接列上有索引,这样JOIN 执⾏效率最⾼。 8. 【建议】建表或加索引时,保证表⾥互相不存在冗余索引 。 ⽐如:如果表⾥已经存在key(a,b), 则key(a)为冗余索引,需要删除。

 关于SQL编写:

1. 【强制】程序端SELECT语句必须指定具体字段名称,禁⽌写成 *。

2. 【建议】程序端insert语句指定具体字段名称,不要写成INSERT INTO t1 VALUES( … )。

3. 【建议】除静态表或⼩表(100⾏以内),DML语句必须有WHERE条件,且使⽤索引查找。

4. 【建议】INSERT INTO … VALUES(XX),(XX),(XX).. 这⾥XX的值不要超过5000个。 值过多虽然上线很 快,但会引起主从同步延迟。

5. 【建议】SELECT语句不要使⽤UNION,推荐使⽤UNION ALL,并且UNION⼦句个数限制在5个以内。

6. 【建议】线上环境,多表 JOIN 不要超过5个表。

7. 【建议】减少使⽤ORDER BY,和业务沟通能不排序就不排序,或将排序放到程序端去做。ORDER BY、GROUP BY、DISTINCT 这些语句较为耗费CPU,数据库的CPU资源是极其宝贵的。

8. 【建议】包含了ORDER BY、GROUP BY、DISTINCT 这些查询的语句,WHERE 条件过滤出来的结果 集请保持在1000⾏以内,否则SQL会很慢。

9. 【建议】对单表的多次alter操作必须合并为⼀次 对于超过100W⾏的⼤表进⾏alter table,必须经过DBA审核,并在业务低峰期执⾏,多个alter需整合在⼀起。 因为alter table会产⽣表锁 ,期间阻塞对于该表的所有写⼊,对于业务可能会产⽣极⼤影响。

10. 【建议】批量操作数据时,需要控制事务处理间隔时间,进⾏必要的sleep。

11. 【建议】事务⾥包含SQL不超过5个。 因为过⻓的事务会导致锁数据较久,MySQL内部缓存、连接消耗过多等问题。

12. 【建议】事务⾥更新语句尽量基于主键或UNIQUE KEY,如UPDATE … WHERE id=XX; 4 否则会产⽣间隙锁,内部扩⼤锁定范围,导致系统性能下降,产⽣死锁。

二、关于索引失效:

1. 最佳左前缀法则

2. 主键插⼊顺序

3. 计算、函数导致索引失效

4. 类型转换导致索引失效

5. 范围条件右边的列索引失效

6. 不等于(!= 或者<>)索引失效

7. is null可以使⽤索引,is not null⽆法使⽤索引

8. like以通配符%开头索引失效

9. OR 前后存在⾮索引的列,索引失效

10. 数据库和表的字符集统⼀使⽤utf8mb

三、为什么不⽤红⿊树⽽是⽤B+tree

MySQL选择使⽤B+树⽽不是红⿊树作为其索引数据结构,主要是出于以下⼏个原因:

1. 磁盘访问效率 :

数据库系统通常需要处理⼤量的数据,这些数据往往存储在磁盘上。磁盘访问的代价远⾼于内存访问,因此优化磁盘访问效率⾄关重要。B+树的设计特别适合磁盘存储, 其节点可以容纳更多的键值对,减少了磁盘I/O次数。

2. 数据组织 :

B+树将所有数据记录存储在叶⼦节点上,⽽⾮叶⼦节点只包含键值和指向其他节点的指针。这种结构使得范围查询和顺序访问更加⾼效,因为数据记录在叶⼦节点上连续存储,便于磁盘的顺序读取。

3. ⾼度平衡 :

B+树的⾼度通常较低,因为每个节点可以包含更多的⼦节点。这意味着从根节点到叶⼦节点的距离较短,查询效率更⾼。红⿊树虽然也是平衡树,但在插⼊和删除操作中可能需要进⾏较多的结构调整,以保持平衡。

4. 空间利⽤率 :

B+树的空间利⽤率更⾼。由于⾮叶⼦节点不存储数据记录,节点的空间可以被更充分地利⽤,减少了空间浪费。

5. 并发控制 :

在数据库系统中,并发访问和锁机制是⾮常重要的。B+树的结构使得它可以更好地⽀持并发操作,尤其是在进⾏范围查询时,可以更容易地实现锁的粒度控制。

综上所述,B+树在磁盘存储、数据组织、查询效率、空间利⽤率和并发控制等⽅⾯都更适合⽤于 数据库索引,因此MySQL选择了B+树作为其索引数据结构。

相关文章:

索引小tips

一、优化原则 关于创建索引&#xff1a; 1. 【强制】InnoDB表必须主键为id int/bigint auto_increment&#xff0c;且主键值禁⽌被更新 。 2. 【强制】InnoDB和MyISAM存储引擎表&#xff0c;索引类型必须为 BTREE 。 3. 【建议】主键的名称以 pk 开头&#xff0c;唯⼀键以…...

2024年【中级消防设施操作员(考前冲刺)】报名考试及中级消防设施操作员(考前冲刺)免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 中级消防设施操作员&#xff08;考前冲刺&#xff09;报名考试是安全生产模拟考试一点通生成的&#xff0c;中级消防设施操作员&#xff08;考前冲刺&#xff09;证模拟考试题库是根据中级消防设施操作员&#xff08;…...

数据结构:栈(含源码)

目录 一、栈的概念和结构 二、栈的实现 2.1 头文件 2.2 各个功能的实现 初始化栈 入栈 出栈 获取栈顶元素和栈中有效个数 判断栈是否为空 栈的销毁 2.3 测试 完整源码 一、栈的概念和结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和…...

如何使用Markdown编辑器

欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&#x…...

当代最火的哲学家颜廷利:全球公认十个最厉害的思想家之一

颜廷利书法特点和艺术成就:全球公认十个最厉害的思想家之一&#xff0c;颜廷利教授是一位杰出的‌书法家,他的书法作品不仅体现了‌中国传统文化,而且在国内外享有高度评价,对当代书法艺术产生了深远的影响。在中国十大顶级哲学家排行榜上,当今世界最重要的思想家颜廷利教授的书…...

android13内核增加调试接口给上层使用

总纲 android13 rom 开发总纲说明 目录 1.前言 2.处理方法分析 3.代码参考 3.1方法1 3.2方法2 3.3方法3 3.4方法4 4.彩蛋 1.前言 有时候,我们在开机的过程中,adb服务还没有起来,系统奔溃了,不能正常开机,我们没法看到相关的logcat信息,导致我们不能很快的定…...

linux:phpstudy安装及日常命令使用[表格]

官网安装&#xff1a;小皮面板下载安装&#xff0c;一键管理服务器-小皮面板 (xp.cn) centos安装&#xff1a; yum install -y wget && sudo wget -O install.sh https://dl.xp.cn/dl/xp/install.sh && sudo bash install.sh 快速使用 [rootlocalhost ~]# …...

【python】Linux升级版本

目的 迁移项目包路径到服务器上 查看服务器包是否和本地已有项目python版本相同然后发现~嗯不一样 项目上包时用的3.8~ 服务器用的2.7 查看方法&#xff1a; python -version解决方案 一&#xff1a;项目所有包重新下载 二&#xff1a;升级服务器python版本 第二种步骤&…...

鸿蒙开发if判断有点坑

它的判断和Android的有点不同,归结到底不是同一种语言,数据类型不一样 if (0) {logContent("aa","0") } else {logContent("aa","00")...

IT课程学习搭子

各种IT课程齐全可学&#xff0c;价格你绝对想不到&#xff0c;相比于培训班有以下优势&#xff1a; 1、避免被割韭菜&#xff0c;避免踩坑&#xff0c;避免交智商税&#xff0c;最低的成本学最有价值的课&#xff0c;同时又能达到比培训班更好的效果 2、收徒&#xff0c;带你学…...

hive拼接字符串concat函数的用法

在 Hive 中&#xff0c;字符串拼接是一种常见的操作&#xff0c;用于将多个字符串连接在一起形成一个新的字符串。这在数据处理和分析过程中经常会用到&#xff0c;比如将不同列的值拼接成一个完整的信息、拼接成文件路径等等。 字符串拼接函数 在 Hive 中&#xff0c;我们可…...

Linux-理解shell

文章目录 5. 理解shell5.1 shell的类型5.2 交互shell和系统默认shell5.3 安装zsh shell程序5.4 shell的父子关系5.5 命令列表5.6 命令分组5.7 使用命令分组创建子shell5.8 子shell用法5.9 shell的非内建命令和内建命令5.9.1 非内建命令5.9.2 内建命令5.9.3 history和alias命令介…...

FutureTask详解

目录 FutureTask详解1、FutureTask简介2、FutureTask内部结构继承结构类属性构造方法内部类WaitNode 3、Runnable、Callable、Future、RunnableFuture接口①、Runnable接口②、Callable接口③、Future接口④、RunnableFuture接口总结对比 4、FutureTask的使用示例普通Thread使用…...

javase综合案例4 -- 考试系统

文章目录 一&#xff0c;项目要求二&#xff0c;创建实体类ExamItem三&#xff0c;创建考试服务类ExamService3.1 全局变量 考题列表itemList(List< ExamItem >类型)&#xff0c;答案数组answerArr (String[]类型)&#xff0c;得分score3.2 初始化方法init()3.3 打印菜单…...

Logistic回归

Logistic回归模型&#xff1a; 适用于二分类或多分类问题&#xff0c;样本特征是数值型&#xff08;否则需要转换为数值型&#xff09; 策略&#xff1a;极大似然估计 算法&#xff1a;随机梯度 或 BFGS算法&#xff08;改进的拟牛顿法&#xff09; 线性回归表达式&#xf…...

Langchain-Chatchat+Xinference集成部署

Langchain-ChatchatXinference集成部署 安装环境&#xff1a; 系统&#xff1a;Anolis OS 8.9 python版本&#xff1a;Python 3.9.19 Langchain-Chatchat版本&#xff1a;0.3.1.3 Xinference版本&#xff1a;v0.13.3 模型选择&#xff08;下载时需要科学上网&#xff09;&#…...

江协科技51单片机学习- p33 PWM呼吸灯和直流驱动电机调速

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…...

使用Jetbrains.Rider反编译Unity的DLL文件看源码

直接将dll文件的打开方式用Rider打开即可&#xff0c;打开BattleSeqGenertor.dll文件的效果如下&#xff1a;...

【学习笔记】决策单调性优化DP

背景 GDCPC还在发力&#xff0c;清华出题组出的牛客还是 4 题。 这次没有min25筛&#xff0c;不然我能5题&#xff08;bushi 除了一道用 prufer 序列的恶心 DP 外&#xff0c;还有一道DP题是一个状态难想&#xff0c;并且还需要决策单调性优化的DP&#xff0c;被认为是偏简单…...

【每日一题】【二分图最大匹配】【经典板子题】有大家喜欢的零食吗 河南萌新联赛2024第(一)场:河南农业大学 C题 C++

河南萌新联赛2024第&#xff08;一&#xff09;场&#xff1a;河南农业大学 C题 有大家喜欢的零食吗 题目描述 在某幼儿园中共有 n n n个小朋友&#xff0c;该幼儿园的老师为这 n n n 个小朋友准备了 n n n 份不一样的零食大礼包。每个小朋友只能选择一个&#xff0c;但老…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...