普通索引和唯一索引的区别以及何时需要建立索引

SAP FICO CBS接口-银企直连付款平台功能开发说明书(包括测试样例、FS) 阅读详情

普通索引和唯一索引的区别以及何时需要建立索引

一、背景介绍
索引作用:简而言之,加快搜索速度

常见索引分类:普通索引,唯一索引,主键索引,全文索引,组合索引

今天主要探讨普通索引,唯一索引和主键索引,不涉及全文索引和组合索引

二、知识剖析
普通索引:最基本的索引,相对于唯一索引和主键索引无特殊限制

主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值,将整个数据表变成聚集索引

主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值,将整个数据表变成聚集索引

唯一索引与主键索引不一样的地方:

①本质:主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。

②包含关系:主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。

③空值:唯一性索引列允许空值,而主键列不允许为空值。

④默认创建:主键列在创建时,已经默认为空值 + 唯一索引了。

⑤主键唯一性:一个表最多只能创建一个主键,但可以创建多个唯一索引。

⑥引用外键:主键可以被其他表引用为外键,而唯一索引不能。

索引原理:

几乎所有索引都是单独建立目录,里面按顺序(B-Tree)存储着字段所有值和对应的主键,然后在索引中找到查询的字段后,依靠此主键去聚集索引中查询该条信息

三、常见问题
既然索引这么牛,那我是不是应该每个字段都加一个呢?

答案当然是否定的

建立一个索引,就会将该字段的值取出来排序重新建立一个目录,每一个字段建立的目录都不一样,互不影响,所以,每新建一个索引:

1.增删改的速度就会慢上一分,因为得去修改相应目录

2.表格体积就会更臃肿,因为目录也是要占用空间的

四、解决方案
这些情况下不适合用索引:

1.字符长度过长不适合建

2.字段较少不适合建

3.数据较少不适合建

4.查询较少不适合建

5.更新频繁不适合建

6.唯一性差的字段不适合建

五、编码实战
针对师兄几个问题,测试如下

首先往名字设置唯一索引的表格添加十条数据

再添加一次,数据相同,大家知道,肯定是插入失败

此时,数据库里还是只有十条数据的,我再随便加入一条确定好可以发现

从上图可以看到,id 11被跳过了,所以应该是先增加再删除

六、扩展思考
使用索引需要注意的点

1.尽量先装载数据再建立索引

2.like模糊查询时,带索引字段关键词不要使用左模糊查询和全模糊查询

3.一个表的索引尽量不要超过三个,严禁超过五个

4.在varchar等字段类型上建立索引时,须指定索引长度,可以提高速度节约空间减少IO操作

5.索引不会包含有null值的列

6.有where子句的情况下order by子句索引会失效,建议建立复合索引

7.不要在查询列上进行运算,也会导致索引失效

使用误区
1.宁缺毋滥,认为一个查询就需要建一个索引。

2.宁滥勿缺,认为索引会消耗空间、严重拖慢更新和新增速度。

3.抵制唯一索引,认为业务的惟一性一律需要在应用层通过“先查后插”方式解决。

七、参考文献
阿里开发手册

https://zhuanlan.zhihu.com/p/23624390

https://www.cnblogs.com/luyucheng/p/6289714.html

八、更多讨论
1.

应用层即在java中使用判断语句来判断数据是否重复,如果重复,则会跳出警告并且不会添加此条信息,而唯一索引抛出异常是数据库本身的操作,所以当高并发的情况下,如果提交数据存在延迟,使用第一种情况就有可能造成数据的重复从而造成业务错误,而在数据库中使用唯一索引判断则不会出现此情况,感谢师兄的补充,对于高并发的确是我知识点的空缺

关于此问题,就要涉及到索引的原理了,因为唯一索引是先从索引目录中找指定字段,找到后根据指定字段的主键去聚集索引里找寻,所以比直接利用主键索引多了一个步骤,因此,使用主键索引查找一定是更快的。

在唯一索引中,只要设置允许null值,那么无论多少个Null,其值都是不重复的,因为java中规定null不为任何值。但是如果某一列存在null,那么这一列的索引在查找时也就失效了,所以一般设置索引的列都不准输入值为空。

uniapp - [微信小程序] 实现点击预览各种文件 pdf文档、视频mp4、mp3音乐、图片图像、word/excel/ppt 等,uniapp小程序文件预览功能(详细示例代码,一键复制开箱即用) uniapp,uniapp微信小程序,支付宝小程序平台端,uniapp实现文件在线预览,uniapp微信小程序怎么实现预览视频mp4,mp3音乐,图片,office文档,小程序平台如何在线预览word/excel/ppt文档,uniapp实现小程序端的文件查看功能,uniapp小程序端实现pdf文件预览,uniapp纯前端预览PDF、DOC、DOCX、图片、视频,uni-app文档、图片预览查看,uniapp文档预览功能,uniapp小程序端文件预览,uniapp小程序平台纯前端解析word,pdf,xls 阅读详情

相关推荐

BCM-BCP-DRP-运维管理之故障管理——故障的分类与处理流程

ITSM Business Continuity Manage(BCM) BusinessContinuityPlan(BCP) 偏业务 DisasterRecoveryPlan(DRP) 偏IT 天塌了,考虑在天塌了的状态下做什么,怎么开展业务就是BCP; 天塌了,考虑怎么把天撑回去,就是DRP。 DRP+BCP+供应链管理+危机管理等就是BCM (业务连续性管...

mmgithub123的博客 2720

mysql索引的使用

mysql索引的使用1. 索引的介绍1.1索引的作用1.2索引的分类2. 索引的创建2.1 创建方法2.1.1 通过navicat创建普通索引2.1.2 用sql创建表时创建2.1.3 表已经存在时,通过sql创建2.2 创建时的注意事项3. 索引查询不生效的情况3.1 查询条件中有函数3.2 查询条件中有表达式3.3 字段值出现隐式转换3.4 like查询时百分号在左边3.5 or关联的条件中存在没用上索引的情况时3.6 not like查询3.7 not in部分情况下查询3.8 过滤出来的记录数太少3

xiangjiaoshu29的博客 758

HC-SR04测距不准?STM32F103定时器捕获模式详解与精度提升实战

本文详细解析了HC-SR04超声波测距模块在STM32F103上的精度问题,并提供了定时器输入捕获模式的实战配置方法。通过硬件级时间测量和温度补偿算法,将测距精度提升至±0.1cm,适用于工业级应用场景。文章包含完整的代码实现和测试对比数据,帮助开发者解决超声波测距不准的常见问题。

weixin_30313409的博客 351

唯一索引和普通索引的区别

一、背景介绍 索引用来快速地寻找那些具有特定值的记录,如果没有索引,执行查询时Mysql必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录,表里面的记录数量越多,这个操作的代价就越高,如果作为搜索条件的列上已经创建了索引,mysql无需扫描任何记录即可迅速得到目标记录所在的位置。如果表有一千个记录,通过索引查找记录至少要比顺序扫描记录快100倍。所以对于现在的各种大型数据库来说,索...

m0_37501154的博客 4400

UE游戏引擎材质简单入门

什么是物体的材质,材质属性定义了物体的某些特性,从而决定了物体表面是如何与光线相作用的。UE中物理基础渲染(Physically Based Rendering OR PBR)几乎可以让我们模拟显示世界中的任何材质。那么如何在UE中制作出真实的PBR材质,基于我们提供的游戏引擎插件,如何将这些材质资源导出,并应用到 SuperMap iClient3D for Cesium/WebGL 平台上,提升模型的显示效果呢,下面小编将详细讲解一下。

m0_71055362的博客 2509

Axure原型模板与元件库APP交互设计素材(附资料)

在Axure中,手机模型是展示APP或小程序界面效果的重要工具。通过导入手机模型元件,设计师可以更加直观地模拟真实设备的显示效果,从而更准确地评估设计的可行性和用户体验。Axure官方及第三方资源库中提供了多种品牌和型号的手机模型,如iPhone、Android等,设计师可以根据项目需求选择合适的模型进行使用。Axure作为一款强大的原型设计工具,为APP和小程序的设计与开发提供了丰富的界面组件元件库和交互设计素材。

招风的黑耳优快云 1976

MySQL普通索引、唯一索引、主索引、外键索引、复合索引、全文索引的使用

MySQL普通索引、唯一索引、主索引、外键索引、复合索引、全文索引的使用

乐杨俊浅谈LAMP 5437

从FSI到三层堆叠:一文搞懂车载CIS图像传感器技术演进与选型避坑

本文深入解析车载CIS图像传感器从FSI到三层堆叠的技术演进,揭示不同结构在低光性能、HDR表现和温度稳定性上的关键差异。通过实测数据对比,指导智能驾驶系统选型策略,帮助开发者规避成本与性能的常见陷阱,提升车载摄像头在复杂环境下的成像质量。

weixin_30689307的博客 99

mysql数据库(六)索引

查某个库的所有索引信息 select t.TABLE_ID,t.NAME,INDEX_ID,i.NAMEfrom INNODB_SYS_TABLES t,INNODB_SYS_INDEXES i where t.table_id=i.table_id;   PRIMARY, INDEX, UNIQUE 这3种是一类 PRIMARY 主键。就是 唯一 且 不能为空。 INDEX 索引,普通

xiaoyu的博客 412

苏州大学自动化考研842自动控制原理:手把手教你用胡寿松《自控》高效备考(附复试电工/电子/微机原理攻略)

本文详细解析苏州大学自动化考研842自动控制原理备考策略,以胡寿松《自动控制原理》为核心教材,提供三阶段高效学习路径和实战技巧。重点涵盖频域分析、根轨迹绘制等高频考点,并针对机电、光电、轨道三个学院的复试科目(电工电子技术、电子技术基础、微机原理与接口技术)给出差异化备考方案,助力考生全面提升笔试和面试表现。

weixin_42638178的博客 399

保姆级教程:在LKD3588开发板上为RK3588添加SC2210摄像头驱动(含完整DTS配置)

本文提供了一份详细的教程,指导如何在LKD3588开发板上为RK3588处理器添加SC2210摄像头驱动,包括完整的DTS配置和内核编译步骤。教程涵盖了环境准备、驱动文件添加、DTS配置详解、内核编译与烧录、驱动测试以及常见问题排查,帮助开发者快速实现SC2210传感器在RK3588平台上的集成与优化。

weixin_42641741的博客 479

金三银四面试题(十八):MySQL索引

官方介绍索引是帮助MySQL 高效获取数据的数据结构。更通俗地说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在单独的索引文件中,也可能和数据一起存储在数据文件中)。我们通常所说的索引,包括聚集索引、覆盖索引、组合索引、前缀索引、唯一索引等,没有特别说明,默认都是使用树结构组织(多路搜索树,并不一定是二叉的)的索引。

weixin_45700531的博客 610

Qt入门教程【基础控件篇】QLineEdit输入框

QLineEdit输入框

小鱼酱的博客 3260

mysql索引 include_Mysql学习系列之四:Mysql索引

一、索引分单列索引和组合索引………………………………………………………………………………………1二、介绍一下索引的类型………………………………………………………………………………………………….1三、单列索引和组合索引………………………………………………………………………………………………….2在数据库表中,使用索引可以大大提高查询速度。All storage engines support at...

weixin_35103924的博客 715

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

数据库索引

数据库索引原理,及MySQL索引类型

rootkiss的博客 275

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

关于mysql索引的小总结

Mysql常见的索引:主键索引、唯一索引、普通索引、全文索引、组合索引 唯一索引 与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值(注意和主键不同)。如果是组合索引,则列值的组合必须唯一。 例如,在已经存好数据的表中添加唯一索引,如果值有重复会报错 主键索引 它是一种特殊的唯一索引,不允许有空值。 组合索引: 平时用的SQL查询语句一般都有比较多的限制条件,所以为了进一步榨取MySQL的效率,就要考虑建立组合索引。 。。。。 索引失效的7种情况: 什么时候没用? 1.有or必全有

wanlainet的博客 147

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MySQL索引的相关知识点

MySQL 索引 是一种数据结构 查询效率获得提高 MyISAM: B+树 数据和索引分离 由三个文件组成 frm 存放创建的表的基础信息 myi 索引 myd 数据 数据存储,随意存储,离散程度大,即非聚集索引 即MyISAM都是非聚集索引 主索引:索引值不重复的索引都可以叫主索引 辅助索引:存储的是数据的地址,允许索引值重复 InnoDB B+树 数据和索引结合,把索引当成数据的一部分 1、...

AleanSue的博客 198

mysql索引入门

什么是索引呢?索引是一种数据结构,是为了加快查找的速度,mysql默认使用B+树索引。 什么是B+ 树?这得从平衡二叉树说起,平衡二叉树是每一个子树的高度差的绝对值不超过1,这样导致查找数据的时间复杂度为n(logN),但是它也有问题,就是他是一个二叉树,所以如果有海量的数据,必当深度很深,所以就引入了B树,最开始几个版本的mysql就是用的B树,B树就是可以允许多子链接的平衡树,这样每一个节点都有很多子树,就可以明显降低树的深度;而进一步改进,就是B+ 树,B+树就是在B树的基础上,数据只存在叶子节..

LLChopin的博客 279

mysql索引

1.什么是索引 索引相当于我们的目录,目的是为了提高我们的查询速率 2.索引的分类 (1)从物理存储的角度分为 聚簇索引:一张表只有一个聚簇索引 非聚簇索引,又叫二级索引:可以有多个 (2)从逻辑角度分为 普通索引 唯一索引 主键索引 全文索引 (3)从作用段字数分为 单列索引 联合索引 3.那些情况下不适合建立索引 在where中用不到的字段 数据量小的情况下 经常更改数据的表上不适合建立索引 有大量重复的列上不适合建立索引 4.什么情况下索引会失效 以%开头的like查询

qq_59676409的博客 884

mysql之索引详解

一、索引 1.什么是索引 1)索引就好比一本书的目录,它能让你更快的找到自己想要的内容。 2)让获取的数据更有目的性,从而提高数据库检索数据的性能。 索引类型介绍 1)BTREE:B+树索引(Btree,B+tree,B*tree) 2)HASH:HASH索引 (将数据打散再去查询,Inodb和Myisam都不支持,设置完还是Btree,memery存储引擎支持) 3)FULLTEXT:全文索引 (只可以用在MyISAM引擎) 通过关键字的匹配来进行查询,类似于like的模糊匹配,like + %在文本比较

givenchy_yzl的博客 487

我秃了!唯一索引、普通索引我该选谁?

你遇到过不知道如何选择唯一索引和普通索引的场景么?你知道他俩的原理和区别么?来不及了,快上车!!

陈哈哈的菜园子 4966

MySQL 普通索引和唯一索引的区别详解

1 概念区分 普通索引和唯一索引 普通索引可重复,唯一索引和主键一样不能重复。 唯一索引可作为数据的一个合法验证手段,例如学生表的身份证号码字段,我们人为规定该字段不得重复,那么就使用唯一索引。(一般设置学号字段为主键) 主键和唯一索引 主键保证数据库里面的每一行都是唯一的,比如身份证,学号等,在表中要求唯一,不重复。唯一索引的作用跟主键的作用一样。 不同的是,在一张表里面只能有一个主键,主键不能为空,唯一索引可以有多个,唯一索引可以有一条记录为空,即保证跟别人不一样就行。 比如学生表,在学校里面一般用学号

qq_43842093的博客 6368

Mysql唯一索引和普通索引的区别,

文章目录Mysql唯一索引和普通索引的区别,那种速度快一点,原因是啥理由说明:结论:1 普通索引2 唯一索引注意:唯一索引和普通索引使用的结构都是B-tree,执行时间复杂度都是O(log n)。3 主索引4 外键索引5 复合索引6 全文索引 Mysql唯一索引和普通索引的区别,那种速度快一点,原因是啥 其实,如果业务上就要求我们数据库的值必须是唯一的,那没什么好讨论的,就选择唯一索引;那么如果业务上要求不严格,或者说不需要我们数据库后台来保障唯一性要求,这时候我们选择唯一索引还是普通索引就看谁在性能上更好

zou_albert的博客 7348

索引(index)_普通索引、唯一索引和复合索引.索引查询

普通索引、唯一索引和复合索引

点滴记录,积流成河! 5万+

mysql的唯一索引和普通索引有什么区别

性能方面:在查询性能上,唯一索引和普通索引没有显著的差异,主要取决于索引的选择性和查询的复杂性。唯一索引在保证数据唯一性方面有额外开销,但对于普通查询来说,其性能表现与普通索引类似。使用场景唯一索引:适用于需要保证某列值唯一的场景,例如用户名、电子邮件地址等。普通索引:适用于不需要唯一性的列,用于提高查询速度,例如用于快速查找和排序。选择索引类型应基于实际需求。如果数据需要唯一性约束,则使用唯一索引;如果只是为了提高查询性能,则可以使用普通索引。当你在字段上设置UNIQUE。

m0_61716416的博客 2410

mysql普通索引与唯一索引区别

一、创建索引语句差异 1.1 普通索引 ALTER TABLE `tt_test` ADD INDEX `k_title` (`title`) USING BTREE ; 1.2 唯一索引 ALTER TABLE `tt_test` ADD UNIQUE INDEX `un_index_title` (`title`) USING BTREE ; 二、查询语句差异 我们用这个查询语句来分析一下...

希望我的博客,能解决你工作中的问题 6991
上一篇: jdbc数据库连接池的原理及分析
下一篇: string数组怎么定义
learning__java
博客等级 码龄8年 87粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值