Inplace: 在原表上进行更改,不需要生成临时表,不需要进行数据 copy 的过程。 根据是否行记录格式,分为两类: rebuild:需要重建表(重新组织聚簇索引)。...rebuild_constraints 此方法使用 ALTER TABLE 删除并重新添加引用新表的外键约束。这是首选的方式,除非子表(引用 DDL 表中列的表)太大,更改会花费太长时间。...说明: 由于 MySQL 中的限制,外键在更改后不能与之前的名称相同。该工具在重新定义外键时必须重命名外键,通常在名称中添加一个前导下划线 '_' 。...在某些情况下,MySQL 还会自动重命名外键所需的索引。 drop_swap 禁用外键检查(FOREIGH_KEY_CHECKS=0),先删除原始表,然后将新表重命名到原来的位置。...提供了这种处理外键约束的方法,以便数据库管理员可以根据需要禁用该工具的内置功能。 --only-same-schema-fks 只在与原始表相同数据库的表上检查外键。
,而InnoDB类型支持;MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能;因此,其支持事务处理、支持外键、支持崩溃修复能力和并发控制是我们建表时首选的存储引擎...5、使用MySQL分区表需谨慎 分区是将一个表的数据按照某种方式,比如按照时间上的月份,分成多个较小的,更容易管理的部分,但是逻辑上仍是一个表;分区表在物理上表现为多个文件,在逻辑上仍表现为同一个表...,在执行排序等操作时就不能使用内存临时表,必须使用磁盘临时表执行操作;TEXT和BLOB类型只能使用前缀索引(当索引是很长的字符序列时,这个索引将会很占内存,而且会很慢,这时候就会用到前缀索引了;所谓的前缀索引就是去索引的前面几个字母作为索引...3、尽量避免使用外键约束 不建议使用外键约束(foreign key),但一定要在表与表之间的关联键上建立索引; 外键虽然可以保证数据的参照完整性,但外键也会影响父表和子表的写操作从而降低性能,还会使得表更耦合...SQL 执行 1)大SQL在逻辑上比较复杂,是需要占用大量CPU 进行计算一条SQL语句; 2)在MySQL中,一条SQL 语句只能使用一个CPU 进行计算; 3)SQL拆分后可以通过并行执行来提高处理效率
,其支持事务处理、支持外键、支持崩溃修复能力和并发控制是我们建表时首选的存储引擎。...5、使用MySQL分区表需谨慎 分区是将一个表的数据按照某种方式,比如按照时间上的月份,分成多个较小的,更容易管理的部分,但是逻辑上仍是一个表;分区表在物理上表现为多个文件,在逻辑上仍表现为同一个表,需要谨慎选择分区键...,在执行排序等操作时就不能使用内存临时表,必须使用磁盘临时表执行操作; TEXT和BLOB类型只能使用前缀索引(当索引是很长的字符序列时,这个索引将会很占内存,而且会很慢,这时候就会用到前缀索引了;所谓的前缀索引就是去索引的前面几个字母作为索引...3、尽量避免使用外键约束 不建议使用外键约束(foreign key),但一定要在表与表之间的关联键上建立索引; 外键虽然可以保证数据的参照完整性,但外键也会影响父表和子表的写操作从而降低性能,还会使得表更耦合...SQL 执行 1)大SQL在逻辑上比较复杂,是需要占用大量CPU 进行计算一条SQL语句; 2)在MySQL中,一条SQL 语句只能使用一个CPU 进行计算; 3)SQL拆分后可以通过并行执行来提高处理效率
原理 pt-online-schema-change在工作过程时,首先会创建一张要修改的表的空表,在空表上执行alter语句。然后从原始表中copy数据行导入新表。...数据是以一定的块大小从原表拷贝到临时表,在数据拷贝前,会在原表上创建delete触发器、update触发器、insert触发器,拷贝过程中在原表上进行的写操作都会通过触发器更新到临时表。...如果原表有外键,需要使用--alter-foreign-keys-method指定特定值,否则工具不予执行。 要创建临时表,应该提前查看磁盘空间,如果磁盘空间不足会导致变更失败。...rebuild_constraints:采用alter table的方式删除和新建外键,并重新添加引用新表的外键约束。优先选用此方式,除非子表太大,ALTER会花费很长时间。...pt-osc的时候,思考过这么一个问题,我们知道在执行过程中会在原表上建立触发器,当有业务update原表时,触发器会在临时表上同样进行update,那如果此时原表上要update的数据还没有copy到临时表该怎么办呢
old_alter_table参数,判断是通过INPLACE还是COPY的算法,默认为OFF,表示采用INPLACE的方式: INPLACE 表示创建索引或删除索引操作不需要创建临时表; COPY 表示按照...MySQL 5.1版本之前的方法,即创建临时表。...1、将INSERT、UPDATE、DELETE这类DML操作日志写入到一个缓存中 2、是否在原表上修改,还是采用临时表跟具体操作有关,不是所有的操作都建临时表、也不是所有的操作都在原表修改(见如下表格说明...) 3、在原表上修改或采用临时表也不一定会加S锁(见如下表格说明) 4、待完成后再将缓存中的数据应用到表上,以此达到数据的一致性 ?...原理: 1、首先会对表进行分析(数据量、外键等) 2、创建一个临时表 3、创建触发器(3个),用户跟踪插入、更新、删除的数据(原表有写入,通过触发器复制到临时表) 4、copy数据 5、更新外键关联的子表
(更新)数据时即写操作需要锁定整个表,效率便会低一些。...,支持自动增长列,支持外键约束,并发能力强,占用空间是MYISAM的2.5倍,处理效率相对会差一些 Memory:全表锁,存储在内容中,速度快,但会占用和数据量成正比的内存空间且数据在mysql重启时会丢失...InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。...而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快; Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高 8、索引 索引(Index...,二是在插入和删除时 要花费较多的时间维护索引索引加快数据库的检索速度 索引降低了插入、删除、修改等维护任务的速度 唯一索引可以确保每一行数据的唯一性 通过使用索引,可以在查询的过程中使用优化隐藏器
,有6个索引,在进行insert操作的时候,需要重建索引,因此导致花费的时间非常长。...导入完成之后,我们在测试环境上直接使用alter table的操作进行处理, 这里说说alter操作对表造成的影响,在MySQL5.6之前,在alter这个时间段里面,表是被加了锁的(写锁),加写锁时其他用户只能...创建需要执行alter操作的原表的一个临时表,然后在临时表中更改表结构。 2. 在原表中创建触发器(3个)三个触发器分别对应insert,update,delete操作 3....Rename 原表到old表中,在把临时表Rename为原表,最后将原表删除,将原表上所创建的触发器删除。...可以指定多个更改,用逗号分隔 --alter-foreign-keys-method: 这个参数是用来处理需要修改的表上具有外键的情况的,如果表上有外键,则需要使用该参数来处理,该参数有4个值,
INPLACE:操作避免复制表数据,但可以在适当位置重建表。在操作的准备和执行阶段可以简短地获取表上的独占元数据锁定。通常,支持并发DML。...从上面的表中可以看出,创建或者添加二级索引的时候,使用了inplace的操作,不需要重建表,并且允许并发的DML,也就是说,在创建索引的过程中,原表是可读可写的。...外键操作 ? 表操作 ? 表空间操作和分区操作用到的比较少,就不进行介绍了。...我们以创建二级索引为例,我们知道,在创建二级索引的时候,MySQL是支持我们进行DML操作的,如果我们正在对表A进行创建索引的操作,此时有一个update或者insert的SQL也来操作该表A,那么MySQL...的处理办法是将该update或者insert的SQL记录在临时日志文件里面,等待创建索引的动作完毕之后,再进行该SQL操作,在一个高并发的系统中,这种DML的SQL可能非常多,如果一个DDL的操作等待的时间比较长
除非你的业务就是有一张静态表,很长时间才会更新一次。比如,一个系统配置表,那这张表上的查询才适合使用查询缓存。 好在 MySQL 也提供了这种“按需使用”的方式。...,并且有行级锁定和外键约束。...外键约束。只有他支持外键。 支持自动增加列属性auto_increment。 MyISAM存储引擎 MyISAM提供了大量的特性,包括全文检索、压缩等,但不支持事务和行级锁,支持表级锁。...如果MySQL在执行查询的过程中,需要使用临时表来保存中间结果,内部使用的临时表就是Memory引擎。...临时表是指使用CREATE TEMPORARY TABLE语句创建的表,它可以使用任何存储引擎,因此和Memory不是一回事。临时表只在单个连接中可见,当连接断开时,临时表也将不复存在。
九、索引 SET 规范 尽量避免使用外键约束。 不建议使用外键约束(foreign key),但一定要在表与表之间的关联键上建立索引。 外键可用于保证数据的参照完整性,但建议在业务端实现。...外键会影响父表和子表的写操作从而降低性能。 十、数据库 SQL 开发规范 1....同时对于关联操作来说,会产生临时表操作,影响查询效率 MySQL 最多允许关联 61 个表,建议不超过 5 个。 10....在明显不会有重复值时使用 UNION ALL 而不是 UNION UNION 会把两个结果集的所有数据放到临时表中后再进行去重操作。 UNION ALL 不会再对结果集进行去重操作。 15....拆分复杂的大 SQL 为多个小 SQL 大 SQL:逻辑上比较复杂,需要占用大量 CPU 进行计算的SQL 。 MySQL:一个 SQL 只能使用一个 CPU 进行计算。
ALGORITHM OPTION DESCRIPTION COPY MySQL早期的变更方式,需要创建修改后的临时表,然后按数据行拷贝原表数据到临时表,做rename重命名来完成创建,在此期间不允许并发...INPLACE INPLACE方式是在原表上直接修改,对于添加索引、添加/删除列、修改字段NULL/NOT NULL属性等操作,需要修改MySQL内部的数据记录,需要重建表(Rebuild Table)...,重新配置同步(全量 + 增量),会影响数仓业务 ONLINE DDL方式 对于MySQL 5.6到5.7的版本,可以使用OnLine DDL的方式变更,对于大表来说,执行时间会很长,好处是在Master...,变更流程如下(不考虑外键,按照MySQL规范不允许使用外键): ?...修改外键相关的子表,根据修改后的数据,修改外键关联的子表。 rename源数据表为old表,把新表rename为源表名,并将old表删除。 删除触发器。
: temporary创建临时表,此表只能对创建它的用户可见,当断开与数据库的连接时,会自动删除临时表 index-definition:表索引项定义 table_option:用于描述表的选项 select_statement...:可以在语句的末尾添加一个select语句,在一个表的基础上创建一个表 show create table tablename 查看数据表的定义 1.2 查看表结构 语法:describe table_name...表结构复制到当前数据库,命名为表结构t_test2。...1.15.1 非空约束 create table t_user( id int, username varchar(255) not null(**在创建表时添加约束**),...1.15.5 外键约束 关于外键约束的相关术语: 外键约束:foreign key 外键字段:添加有外键约束的字段 外键值:外键字段中的每一个值。
九、索引 SET 规范 尽量避免使用外键约束。 不建议使用外键约束(foreign key),但一定要在表与表之间的关联键上建立索引。...外键可用于保证数据的参照完整性,但建议在业务端实现。 外键会影响父表和子表的写操作从而降低性能。 十、数据库 SQL 开发规范 1....同时对于关联操作来说,会产生临时表操作,影响查询效率 MySQL 最多允许关联 61 个表,建议不超过 5 个。 10....在明显不会有重复值时使用 UNION ALL 而不是 UNION UNION 会把两个结果集的所有数据放到临时表中后再进行去重操作。 UNION ALL 不会再对结果集进行去重操作。 15....拆分复杂的大 SQL 为多个小 SQL 大 SQL:逻辑上比较复杂,需要占用大量 CPU 进行计算的SQL 。 MySQL:一个 SQL 只能使用一个 CPU 进行计算。
MySQL的复制功能是其高可用性和可扩展性的基石,它允许数据从一个数据库服务器(主服务器)复制到一个或多个数据库服务器(从服务器)。然而,在实际操作中,复制系统可能会遭遇外键约束带来的挑战。...本文旨在深入探讨外键对MySQL复制系统的影响,并提供一些应对策略,以确保数据库的稳定运行和数据的完整性。 外键简介 外键是数据库表之间的一个重要链接,它确保了数据的引用完整性和一致性。...通过外键,我们可以在不同的表之间建立关系,并且确保数据的完整性不会因为错误的操作而受损。 外键与复制的冲突 在有外键约束的情况下进行MySQL复制可能会遭遇一些问题。...外键约束检查失败:在从服务器上应用变更时,如果相关的外键数据尚未到位,可能会导致外键约束检查失败,从而使复制进程暂停。...应对策略 面对外键和复制的挑战,我们可以采取以下一些策略来改善或解决问题: 避免使用外键:在设计数据库结构时,尽量减少或避免使用外键约束,以简化复制过程。
数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql的保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要做到见名识意...这样的大数据类型,如果查询中包含这样的数据,在排序等操作时,就不能使用内存临时表,必须使用磁盘临时表进行。...索引set规范 尽量避免使用外键约束 1、不建议使用外键约束(foreign key),但一定要在表与表之间的关联键上建立索引; 2、外键可用于保证数据的参照完整性,但建议在业务端实现; 3、外键会影响父表和子表的写操作从而降低性能...主从环境中,大批量操作可能会造成严重的主从延迟,大批量的写操作一般都需要执行一定长的时间,而只有当主库上执行完成后,才会在其他从库上执行,所以会造成主库与从库长时间的延迟情况 binlog日志为row...pt-online-schema-change它会首先建立一个与原表结构相同的新表,并且在新表上进行表结构的修改,然后再把原表中的数据复制到新表中,并在原表中增加一些触发器。
Explain 介绍 在分析查询性能时,考虑EXPLAIN关键字同样很管用。...其他数据库也叫做唯一索引扫描 NULL:MySQL在优化过程中分解语句,执行时甚至不用访问表或索引 possible_keys列 表示MySQL能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引...:表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询 Using filesort: MySQL中无法利用索引完成的排序操作称为“文件排序”,常见于order by和group by语句中...字段上增加函数,则字段上的索引用不了,需考虑改变写法 去掉不影响查询结果的表 慢查询日志 开启慢查询日志,分日里面执行时间很长语句 , 可以针对性的对常用语句进行建立索引 开启方法my.cnf...call proc_students(); 插入数据中途可以在打开一个会话窗口看插入了多少数据 select count(*) from students; 自动提交开启插入500000条记录真的要花很长很长时间
3)所有表和字段都要添加注释 创建表时使用comment关键字添加表和列的备注,从一开始就进行数据字典的维护。...,在排序等操作时,就不能使用内存临时表,必须使用磁盘临时表进行。...9、索引SET规范 1)尽量避免使用外键约束 不建议使用外键约束(foreign key),但一定要在表与表之间的关联键上建立索引。 外键可用于保证数据的参照完整性,但建议在业务端实现。...外键会影响父表和子表的写操作从而降低性能。...pt-online-schema-change它会首先建立一个与原表结构相同的新表,并且在新表上进行表结构的修改,然后再把原表中的数据复制到新表中,并在原表中增加一些触发器把原表中新增的数据也复制到新表中
可以从其它 MySQL 实例中倒入表数据。 file-per-table tablespaces 中创建的表使用 Barracuda 文件格式。...减少崩溃恢复使用时间及增加成功率。 基于 MySQL Enterprise Backup 备份和恢复单标数据更加快捷,并且不影响其它表使用。...The Temporary Tablespace 非压缩的,用户创建的临时表及磁盘上的内部临时表存储。 表 truncate 或者 drop 操作后,磁盘空间会返还操作系统。...减少崩溃恢复使用时间及增加成功率。 基于 MySQL Enterprise Backup 备份和恢复单标数据更加快捷,并且不影响其它表使用。...The Temporary Tablespace 非压缩的,用户创建的临时表及磁盘上的内部临时表存储。
保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) · 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 · 临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期...,备份,恢复都会有很大的问题 可以用历史数据归档(应用于日志数据),分库分表(应用于业务数据)等手段来控制数据量大小 5、谨慎使用MySQL分区表 分区表在物理上表现为多个文件,在逻辑上表现为一个表 谨慎选择分区键...这样的大数据类型,如果查询中包含这样的数据,在排序等操作时,就不能使用内存临时表,必须使用磁盘临时表进行。...因为mysql优化器在选择如何优化查询时,会根据统一信息,对每一个可以用到的索引来进行评估,以生成出一个最好的执行计划,如果同时有很多个索引都可以用于查询,就会增加mysql优化器生成执行计划的时间,同样会降低查询性能...九、索引SET规范 尽量避免使用外键约束 · 不建议使用外键约束(foreign key),但一定要在表与表之间的关联键上建立索引; · 外键可用于保证数据的参照完整性,但建议在业务端实现; · 外键会影响父表和子表的写操作从而降低性能
领取专属 10元无门槛券
手把手带您无忧上云