InnoDB

MySQL8.0之数据字典

◇◆丶佛笑我妖孽 提交于 2021-01-14 05:19:48
MySQL 8.0 将数据库元信息都存放于InnoDB存储引擎表中,在之前版本的MySQL中,数据字典不仅仅存放于特定的存储引擎表中,还存放于元数据文件、非事务性存储引擎表中。本文将会介绍MySQL 8.0对数据字典的改进,以及改进带来的好处、影响以及局限性。 数据字典 (1)新版本之前的数据字典 数据字典是数据库重要的组成部分之一,那么什么是数据字典?数据字典包含哪些内容呢?数据字典是对数据库中的数据、库对象、表对象等的元信息的集合。在MySQL中,数据字典信息内容就包括表结构、数据库名或表名、字段的数据类型、视图、索引、表字段信息、存储过程、触发器等内容。MySQL INFORMATION_SCHEMA库提供了对数据局元数据、统计信息、以及有关MySQL server的访问信息(例如:数据库名或表名,字段的数据类型和访问权限等)。该库中保存的信息也可以称为MySQL的数据字典。 在MySQL8.0之前,MySQL的数据字典信息,并没有全部存放在系统数据库表中,部分数据库数据字典信息存放于文件中,其余的数据字典信息存放于数据字典库中(INFORMATION_SCHEMA,mysql,sys)。例如表结构信息存放在 .frm 文件中,数据库表字段信息存放于INFORMATION_SCHEMA下的COLUMNS表中。早期,5.6版本之前,MyISAM是MySQL的默认存储引擎

RDS的xb文件恢复到本地mysql5.6版本数据库

跟風遠走 提交于 2021-01-14 05:17:51
参考博客: https://blog.csdn.net/pengjunlee/article/details/81212250 CentOS7下使用YUM安装MySQL5.6 https://blog.csdn.net/a18838964650/article/details/82800621 安装qpress软件 https://www.cnblogs.com/pangchunyu/p/11422830.html 文章介绍补充 https://help.aliyun.com/knowledge_detail/41817.html?spm=a2c4g.11186631.2.1.434247acfAIAwYhttps://home.firefoxchina.cn 阿里云rds的xb文件恢复到本地数据库 https://blog.csdn.net/anonymking/article/details/79589623 解决MySQL 恢复数据库表时提示 table “xxx” doesn`t exist 安装qpress的软件 链接:https://pan.baidu.com/s/1njNRz3qSc0pYYSjbEzSI_Q 提取码:1nxe yum -y localinstall percona-xtrabackup-2.3.5-1.el7.x86_64.rpm yum

最常问的MySQL面试题集合

℡╲_俬逩灬. 提交于 2021-01-14 03:53:06
点击关注上方“ SQL数据库开发 ”, 设为“置顶或星标 ”,第一时间送达干货 除了基础题部分,本文还收集整理的MySQL面试题还包括如下知识点或题型: MySQL高性能索引 SQL语句 MySQL查询优化 MySQL高扩展高可用 MySQL安全性 问题1:char、varchar的区别是什么? varchar是变长而char的长度是固定的。如果你的内容是固定大小的,你会得到更好的性能。 问题2: TRUNCATE和DELETE的区别是什么? DELETE命令从一个表中删除某一行,或多行,TRUNCATE命令永久地从表中删除每一行。 问题3:什么是触发器,MySQL中都有哪些触发器? 触发器是指一段代码,当触发某个事件时,自动执行这些代码。在MySQL数据库中有如下六种触发器: 1、Before Insert 2、After Insert 3、Before Update 4、After Update 5、Before Delete 6、After Delete 问题4:FLOAT和DOUBLE的区别是什么? FLOAT类型数据可以存储至多8位十进制数,并在内存中占4字节。 DOUBLE类型数据可以存储至多18位十进制数,并在内存中占8字节。 问题5:如何在MySQL种获取当前日期? SELECT CURRENT_DATE (); 问题6:如何查询第n高的工资? SELECT

盘点那些面试中最常问的MySQL问题

徘徊边缘 提交于 2021-01-14 03:52:44
1、MySQL中myisam与innodb的区别 MyISAM: 不支持事务,但是每次查询都是原子的; 支持表级锁,即每次操作对整个表加锁; 存储表的总行数; 一个MYISAM表有三个文件:索引文件、表结构文件、数据文件; 采用 非 聚集索引,索引文件的数据域存储指向数据文件的指针。 辅索引与主索引基本一致,但是辅索引不用保证唯一性。 InnoDb: 支持ACID的事务,支持事务的四种隔离级别; 支持行级锁及外键约束:因此可以支持写并发; 不存储总行数; 一个InnoDb引擎存储在一个文件空间(共享表空间,表大小不受操作系统控制,一个表可能分布在多个文件里),也有可能为多个(设置为独立表空,表大小受操作系统文件大小限制,一般为2G),受操作系统文件大小的限制; 主键索引采用聚集索引(索引的数据域存储数据文件本身),辅索引的数据域存储主键的值;因此从辅索引查找数据,需要先通过辅索引找到主键值,再访问辅索引;最好使用自增主键,防止插入数据时,为维持B+树结构,文件的大调整。 两者的适用场景: 因为MyISAM相对简单所以在效率上要优于InnoDB.如果系统读多,写少。对原子性要求低。那么MyISAM最好的选择。且MyISAM恢复速度快。可直接用备份覆盖恢复。 如果系统读少,写多的时候,尤其是并发写入高的时候。InnoDB就是首选了。 扩展问题

【58期】盘点那些面试中最常问的MySQL问题,第一弹!

一笑奈何 提交于 2021-01-14 03:42:57
程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 4 分钟。 来自:网络 1、MySQL中myisam与innodb的区别 MyISAM: 不支持事务,但是每次查询都是原子的; 支持表级锁,即每次操作对整个表加锁; 存储表的总行数; 一个MYISAM表有三个文件:索引文件、表结构文件、数据文件; 采用 非 聚集索引,索引文件的数据域存储指向数据文件的指针。 辅索引与主索引基本一致,但是辅索引不用保证唯一性。 InnoDb: 支持ACID的事务,支持事务的四种隔离级别; 支持行级锁及外键约束:因此可以支持写并发; 不存储总行数; 一个InnoDb引擎存储在一个文件空间(共享表空间,表大小不受操作系统控制,一个表可能分布在多个文件里),也有可能为多个(设置为独立表空,表大小受操作系统文件大小限制,一般为2G),受操作系统文件大小的限制; 主键索引采用聚集索引(索引的数据域存储数据文件本身),辅索引的数据域存储主键的值;因此从辅索引查找数据,需要先通过辅索引找到主键值,再访问辅索引;最好使用自增主键,防止插入数据时,为维持B+树结构,文件的大调整。 两者的适用场景: 因为MyISAM相对简单所以在效率上要优于InnoDB.如果系统读多,写少。对原子性要求低。那么MyISAM最好的选择。且MyISAM恢复速度快。可直接用备份覆盖恢复。 如果系统读少,写多的时候

面试官:插入 100 条数据用时最短的方法是?

故事扮演 提交于 2021-01-13 19:59:01
作者 | 孤独键客 链接 | juejin.im/post/5d255ab9e51d454f73356dcd 最近群里的学习氛围又浓厚了起来。 群友又抛出了一道面试题,有人给出了答案,看完后,是否还有改进的地方,留言评论,一起精进吧! 多线程插入(单表) 问:为何对同一个表的插入多线程会比单线程快?同一时间对一个表的写操作不应该是独占的吗? 答:在数据里做插入操作的时候,整体时间的分配是这样的: 链接耗时 (30%) 发送query到服务器 (20%) 解析query (20%) 插入操作 (10% * 词条数目) 插入index (10% * Index的数目) 关闭链接 (10%) 从这里可以看出来,真正耗时的不是操作,而是链接,解析的过程。 MySQL插入数据在写阶段是独占的,但是插入一条数据仍然需要解析、计算、最后才进行写处理,比如要给每一条记录分配自增id,校验主键唯一键属性,或者其他一些逻辑处理,都是需要计算的,所以说多线程能够提高效率。 多线程插入(多表) 分区分表后使用多线程插入。 预处理SQL 普通SQL,即使用Statement接口执行SQL 预处理SQL,即使用PreparedStatement接口执行SQL 使用PreparedStatement接口允许数据库预编译SQL语句,以后只需传入参数,避免了数据库每次都编译SQL语句,因此性能更好。 String

mysql索引及调优

五迷三道 提交于 2021-01-13 15:54:03
1. 索引数据结构设相关的计算机原理   1、计算机主存和外部存 介绍       1. 在计算机系统中一般包含两种类型的存储,计算机主存(RAM)和外部存储器(如硬盘、CD、SSD等)。       2. 在设计索引算法和存储结构时,我们必须要考虑到这两种类型的存储特点。       3. 主存的读取速度快,相对于主存,外部磁盘的数据读取速率要比主从慢好几个数量级,具体它们之间的差别后面会详细介绍。       4. 上面讲的所有查询算法都是假设数据存储在计算机主存中的,计算机主存一般比较小,实际数据库中数据都是存储到外部存储器的。   2、如何评价索引性能       1. 一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。       2. 这样的话,索引查找过程中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级。       3. 所以评价一个数据结构作为索引的优劣最重要的指标就是在查找过程中磁盘I/O操作次数的渐进复杂度。       4. 换句话说,索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数。   3、主存存取原理        注: 这里本文抛却具体差别,抽象出一个十分简单的存取模型来说明RAM的工作原理       1. 从抽象角度看,主存是一系列的存储单元组成的矩阵

mysql调优二-索引优化

北慕城南 提交于 2021-01-13 14:53:57
mysql调优-索引优化 文章目录 mysql调优-索引优化 一、前置:索引相关知识 1、索引用途/优点/分类 2、索引过程现象 3、索引数据结构 4、索引匹配方式 二、hash/(非)聚簇/覆盖 索引说明 1.哈希索引 2.(非)聚簇索引 3.覆盖索引 三、索引优化 1、具体优化小细节 总结 一、前置:索引相关知识 1、索引用途/优点/分类 索引优点: 1>、大大减少了服务器需要扫描的数据量。 2>、帮助服务器避免排序和临时表。 3>、将随机io变成顺序io。 索引用途: 1>、快速查找匹配WHERE子句的行。 2>、如果可以在多个索引之间进行选择,mysql通常会使用找到最少行的索引。 3>、如果表具有多列索引,则优化器可以使用索引的任何最左前缀来查找行。 4>、当有表连接的时候,从其他表检索行数据。 5>、查找特定索引列的min或max值。 6>、如果排序或分组时在可用索引的最左前缀上完成的,则对表进行排序和分组。 7>、在某些情况下,可以优化查询以检索值而无需查询数据行。 索引分类: 主键索引、唯一索引、普通索引、全文索引、组合索引 2、索引过程现象 回表:当前使用的索引为普通索引,查询的列为非索引列,定位数据需要两步,首先通过普通索引定位到主键值,再根据主键值通过主键索引(聚集索引)来定位对应行记录。出现回表现象会降低查询效率,因为进行了两次索引扫描。 · 覆盖索引

mysql —备份和恢复

廉价感情. 提交于 2021-01-13 08:54:23
备份的目的    灾难恢复、硬件故障、软件故障、自然灾害、黑客攻击、误操作测试等数据 丢失场景 备份注意要点    能容忍最多丢失多少数据   恢复数据需要在多长时间内完成   需要恢复哪些数据 还原要点    做还原测试,用于测试备份的可用性   还原演练 备份类型: 完全备份,部分备份    完全备份 :整个数据集    部分备份 :只备份数据子集,如部分库或表 完全备份、增量备份、差异备份    增量备份 :仅备份最近一次完全备份或增量备份(如果存在增量)以来变化 的数据,备份较快,还原复杂    差异备份 :仅备份最近一次完全备份以来变化的数据,备份较慢,还原简单 注意:二进制日志文件不应该与数据文件放在同一磁盘 冷、温、热备份 冷备 :读写操作均不可进行 温备 :读操作可执行;但写操作不可执行 热备 :读写操作均可执行    MyISAM:温备,不支持热备    InnoDB: 都支持 物理和逻辑备份 物理备份 :直接复制数据文件进行备份,与存储引擎有关,占用较多的空间, 速度快 逻辑备份 :从数据库中“导出”数据另存而进行的备份,与存储引擎无关, 占用空间少,速度慢,可能丢失精度。 备份时需要考虑的因素 温备的持锁多久 备份产生的负载 备份过程的时长 恢复过程的时长 备份什么 数据 二进制日志、InnoDB的事务日志 程序代码(存储过程、存储函数、触发器、事件调度器)

Mysql InnoDB锁

穿精又带淫゛_ 提交于 2021-01-13 08:50:28
行锁模式以及加锁方法: 共享锁:X锁 lock in share mode:共享锁(x锁):多个事务都可以获得同一把锁,但是只能读取不能修改。 开启两个事务,set autocommit=0的含义是设置当前session禁止自动提交,需要显示commit才可以提交。详见: https://www.cnblogs.com/langtianya/p/4777662.html 。 表结构(自己去建表啊...): 首先对sessionA添加lock in share mod, 这时共享锁就已经添加上了,sessionB仍然可以查询记录并且可以添加lock in share mode SessionA对当前Session进行update修改数据时就会进入死锁状态(看当前语句已经没有反应了并且右下角的查询时间在一直增加) 在SessionB中对锁住的这行记录进行修改时就可以解除死锁状态,SessionB中输出DeadlockFound.... 此时SessionA就获得锁可进行更新操作了。。。,再次执行SessionA中的update语句发现可以进行更新了 最后SessionA进行commit提交就会发现数据库已经成功修改了 排他锁(X):一个事务获取了数据行的排他锁,其他事务就不能再获取该数据行的共享锁和排他锁,但是获取到排他锁的数据可以对数据进行修改和读取。 开启了事务A事务B