首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL增加唯一索引场景

MySQL中对于字段、索引的使用,就需要些技巧,否则就会碰到坑,这是初学MySQL,比较不太适应的一个点,看到技术社区推的这篇文章《技术分享 | MySQL添加唯一索引的总结》,就讲到了MySQL...MySQL 5.6 开始支持 Online DDL ,添加[唯一]索引虽然不需要重建,也不阻塞 DML ,但是大场景下还是不会直接使用 Alter Table 进行添加,而是使用第三方工具进行操作,...可以看到 ONLINE DDL 采用 In Place 算法创建索引,添加索引是不阻塞 DML ,大致流程如下: 同步 全量数据。遍历主键索 引,将对应的字段(多字段)值,写到新索引。.../pt-online-schema-change --version pt-online-schema-change 3.0.13 # 创建一张与原结构 一致的新,然后添加唯一索引。.../bin/gh-ost --version 1.1.5 # 创建一张与原结构 一致的新,然后添加唯一索引。 同步 全量数据。

2.6K40

mysql 联合索引 唯一_mysql 联合索引唯一索引

如果也有DML, 我一般只在a 上建索引. 这也是代价平衡的结果....索引怎么建立,除了你的程序应用,还应当要考虑到的活动是否频繁, 如果是典型的oltp,索引就不要建立太多,位图索引就不用考虑, 但是dss系统,主要是为了检索,索引多一点就无所谓 联合索引使用结论:...本文主旨:讨论什么情况下能利用上索引. 索引:创建索引可以根据查询业务的不同分为两种:单一列的索引,联合索引. 顾名思义,单一列索引就是指在的某一列上创建索引,联合索引是在多个列上联合创建索引....本文所用测试软件环境如下:SQL05 DEMO:创建一个人员,包含人员ID,姓名.在人员ID上创建一个聚集索引,在first_name和last_name上创建一个联合 索引. create table...总结:即使创建索引,但如果查询语句写的不科学的话(不符合SARG标准),也于事无补,要根据索引情况来优化查询语句,如没有合适的索引可用,则要创建相应索引 发布者:全栈程序员栈长,转载请注明出处:

2.7K20
您找到你想要的搜索结果了吗?
是的
没有找到

普通索引唯一索引的区别_唯一索引怎么设置

所谓普通索引,就是在创建索引时,不附加任何限制条件(唯一、非空等限制)。该类型的索引可以创建在任何数据类型的字段上。 所谓唯一索引,就是在创建索引时,限制索引的值必须是唯一的。...由于身份证号字段比较大,这里不建议将身份证号当做主键,现在有两个选择,要么给id_card字段创建唯一索引,要么创建一个普通索引。...对于唯一索引来说,所有的更新操作都要先判断这个操作是否违反唯一性约束。比如,要插入(4, 400)这个记录,就要先判断现在中是否已经存在k=4的记录,而这必须要将数据页读入内存才能判断。...这个参数设置为50的时候,表示change buffer的大小最多只能占用buffer pool的50%。...如果业务不能保证,或者业务就是要求数据库来做约定,那么没得选,必须创建唯一索引。这种情况下,本篇文章的意义在于,如果碰上了大量插入数据慢、内存命中率低的时候,可以给你多提供一个排查的思路。

52120

mysql 唯一索引_mysql主键和唯一索引的区别

全文索引(FULLTEXT ):可用于 MyISAM mysql5.6之后也可用于innodb, 用于在一篇文章中,检索文本信息的, 针对较大的数据,生成全文索引很耗时和空间。...一:基本使用 1:唯一索引可以是单列,也可以是多列,下面我们来看下创建语句: # 创建单列唯一索引 alter table sc add unique (name); # 创建多列唯一索引 alter...单列唯一值基本上就是主键。 常用的一般都是多列的唯一索引,比如:当前商品,一个用户只能购买一件。我们将用户id及商品id列设置唯一索引。那么就可以避免一个用户出现重复购买的情况。...2:可以把唯一性约束放在一个或者多个列上,这些列或列的组合必须有唯一的。但是,唯一性约束所在的列并不是的主键列。 3:唯一性约束强制在指定的列上创建一个唯一索引。...在默认情况下,创建唯一性的非聚簇索引,但是,也可以指定所创建索引是聚簇索引

2.6K30

技术分享 | MySQL添加唯一索引的总结

MySQL 5.6 开始支持 Online DDL,添加唯一索引虽然不需要重建,也不阻塞DML,但是大场景下还是不会直接使用Alter Table进行添加,而是使用第三方工具进行操作,比较常见的就属...本文就来总结梳理一下添加唯一索引的相关内容。本文对ONLINE DDL讨论的也是基于MySQL 5.6及以后的版本。...可以看到ONLINE DDL采用In Place算法创建索引,添加索引是不阻塞DML,大致流程如下:同步全量数据。遍历主键索引,将对应的字段(多字段)值,写到新索引。同步增量数据。.../pt-online-schema-change --versionpt-online-schema-change 3.0.13# 创建一张与原结构一致的新,然后添加唯一索引。同步全量数据。.../bin/gh-ost --version1.1.5# 创建一张与原结构一致的新,然后添加唯一索引。同步全量数据。遍历原,通过【INSERT IGNORE INTO】将数据拷贝到新

1.9K30

MySQL中使用 普通索引 or 唯一索引

MySQL中可以创建普通索引唯一索引,这两种索引的区别是: 普通索引(Non-Unique Index),也称为非唯一索引,它允许索引中的条目具有重复的键值。...普通索引创建方法: CREATE INDEX idx_email ON customers(email); 唯一索引(Unique Index)是一种数据库索引,它要求索引中的所有键值都是唯一的。...如果尝试插入或更新记录以产生重复的索引键值,数据库将拒绝这种操作。 唯一索引的特点: 保证索引中的键值是唯一的。 适用于确保数据中某一列或列组合的唯一性,例如身份证号、用户名等。...唯一索引创建方法: CREATE UNIQUE INDEX uidx_email ON customers(email); 选择普通索引还是唯一索引?...change buffer 的大小,可以通过以下参数来动态设置设置为 50 的时候,表示 change buffer 的大小最多只能占用 buffer pool 的 50%。

9810

mysql创建索引

1、索引需要占用磁盘空间,因此在创建索引时要考虑到磁盘空间是否足够 2、创建索引时需要对表加锁,因此实际操作中需要在业务空闲期间进行 SELECT * FROM table_name WHERE...在已存在的中,可以使用ALTER TABLE语句或者CREATE INDEX语句创建索引 在已存在的中,索引创建语句结构 1.普通索引(Normal): ALTER TABLE 名 ADD INDEX...索引名(列名); 或 CREATE INDEX 索引名 ON 名(列名); 2.唯一索引(Unique): ALTER TABLE 名 ADD UNIQUE INDEX 索引名(列名); 或 CREATE...UNIQUE INDEX 索引名 ON 名(列名); 唯一索引的特点: 一个中,可以有多个唯一索引 查询效率高 如果在某一列建立唯一索引,必须保证这列不能有重复数据 如果一个唯一索引上指定...,因此会占用存储空间,一般来说,索引占用的空间的数据的1.5倍;索引的维护和创建需要时间成本,这个成本随着数据量增大而增大;构建索引会降低数据的修改操作(删除,添加,修改)的效率,因为在修改数据的同时还需要修改索引

3.7K40

MySQL选择普通索引还是唯一索引(216)

普通索引唯一索引 基本概述 MySQL中可以创建普通索引唯一索引,这两种索引的区别是: 普通索引(Non-Unique Index),也称为非唯一索引,它允许索引中的条目具有重复的键值。...普通索引创建方法: CREATE INDEX idx_email ON customers(email); 唯一索引(Unique Index)是一种数据库索引,它要求索引中的所有键值都是唯一的。...如果尝试插入或更新记录以产生重复的索引键值,数据库将拒绝这种操作。 唯一索引的特点: 保证索引中的键值是唯一的。 适用于确保数据中某一列或列组合的唯一性,例如身份证号、用户名等。...唯一索引创建方法: CREATE UNIQUE INDEX uidx_email ON customers(email); 使用场景 因为InnoDB引擎是按数据页为单位进行读写操作的,当需要读一条记录的时候...change buffer 的大小,可以通过以下参数来动态设置设置为 50 的时候,表示 change buffer 的大小最多只能占用 buffer pool 的 50%。

10210

Mysql如何选择唯一索引和普通索引

相信大家对唯一索引和普通索引是有一定的了解的,那么在不同的业务场景,使用唯一索引还是普通索引呢,比如下面的场景 假设你在维护一个账户系统,每一个人都有一个唯一的身份证,而业务也能保证他的唯一性,此时我们设置唯一索引和普通索引其实都是可以的...,也就是上图的右下角的数据页,然后通过数据页内容通过二分法定位记录 对于普通索引,查询到满足的而第一个记录后,需要向后继续寻找,直到不满足条件 对于唯一索引,由于索引唯一性,查询到数据后,直接停止查询...那么什么时候可以使用change buffer呢 对于唯一索引,所有的更新操作都要判断这个操作是否违反唯一性约束,比如要插入(4,400)记录,就要判断中是否已经存在k=4的记录,而这将必须把数据也读取到内存中...change buffer 使用的buffer pool的内存大小,因此不能无限增大,可以使用innodb_change_buffer_size来动态设置,这个参数设置为50表示change buffer...分析这条更新语句,你会发现他涉及四部分:内存,redo log ,数据空间,系统空间 这条更新语句做了如下操作 Page1在内存中,直接更新内存 Page2没有在内存中,就直接在内存中的change

1.8K20

MySQL 普通索引唯一索引该如何选择?

MySQL 普通索引唯一索引该如何选择? 普通索引唯一索引在查询能力上没啥差别,主要考虑对更新性能的影响,要尽量选择普通索引。接下来分析两种索引在查询语句和更新语句对性能的影响。...查询过程 MySQL InnoDB 是采用 B+ 树实现其索引结构。 ? image B+ 树的查找过程 如上图所示:现在需要查找 29 这个值。...对于唯一索引来说,定义了唯一性,找到了第一个满足条件的记录后,停止检索。...唯一索引不会使用 Change buffer ,如果索引设置唯一属性,在进行插入或者修改操作时,InnoDB 必须进行唯一性检查,如果不读取索引页到缓冲池,无法校验索引是否唯一,但是可以进行缓冲删除操作...普通索引能够使用 change buffer ,但是唯一索引不行,因此 普通索引唯一索引更新操作快。

1.5K20

mysql学习笔记(四)普通索引还是唯一索引

这一篇主要来分析下如何选择普通索引唯一索引,以及他们在查询时候的原理。 一、change buffer mysql引擎在查询的时候在存储引擎中提供了内存来帮助我们提高查询的效率。...2、唯一索引 对于唯一索引,根据二分查找找到满足条件的记录后,根据唯一索引唯一性,找到第一个就可以停止查找。...,由于唯一索引已经将数据读取到内存中了,所以后续的更新操作直接在内存中更新即可。...另外上面的例子中,change buffer并不适合在唯一索引中使用。 三、唯一索引和普通索引的选择 首先在查询方面,他们的性能其实没有一点差别。...在实际的使用中,在特定的业务场景下普通索引配合change buffer的使用,对于数据量大的的更新优化我觉得还是很明显的。

96120

MySQL InnoDB创建索引

聚簇索引创建方式一般有三种: 用户定义了主键,那么InnoDB依据主键创建聚簇索引 用户没有定义主键,那么InnoDB根据上的第一个唯一非空的列创建聚簇索引 如果以上两条都不符合,那么InnoDB会自动指定一个系统列作为聚簇索引...1.3 InnoDB系统列 InnoDB在创建的时候,除了用户自定义的列之外,还会额外地增加几个隐藏的列,这些列在MySQL Server看来是不可见的,我们称之为系统列。...,若用户既没有定义主键,也没有符合要求的唯一非空列,则InnoDB使用DB_ROW_ID作为主键创建聚簇索引。...2.2 重启后创建索引 MySQL重启后,内部索引对象丢失,需要在启动后重新创建相关的索引MySQL重启后首先会将数据字典内的信息进行读取和初始化,然后根据数据字典的信息进行索引创建。...还是以上文的t为例,假设现在MySQL重启,如何在t上构建索引? step1: 创建聚簇索引 无论如何,聚簇索引都会第一个创建

5.6K30

Oracle 与 MySQL 的差异分析(3):创建索引

Oracle 与 MySQL 的差异分析(3):创建索引 1.1 命名 l Oracle: 名、字段名、索引名等,不能超过30个字符。...1.2 主键和自增长列 MySQL 的主键和 Oracle 差不多,都是对应一个唯一索引并且索引列是非空的。...create table t_test1(abc intprimary key); 不过,MySQL 可以设置一个自增长列作为主键,而在Oracle 中一般用序列实现自增长列,序列和之间没有一一对应关系...由于 MySQL 索引的命名是级别的,所以删除索引时也要指定名。...MySQL 分区创建索引是本地索引,不支持全局索引创建索引不需要 load 关键字。在分区上一般不创建主键或唯一索引,如果要创建的话,需要包含分区列。

1.2K21
领券