MyISAM

MySQL:组成部分、执行流程和存储引擎

浪尽此生 提交于 2020-04-22 00:59:40
一、基本信息 MySQL 是关系型数据库管理系统,是典型的 C/S 架构(Client/Server 架构),服务器程序使用的是 mysqld。 二、组成部分:连接层、SQL 层、存储引擎层 1、连接层:客户端和服务器端建立连接,客户端发送 SQL 到服务器端。 2、SQL 层:对 SQL 语句查询处理。 3、存储引擎层:存储或读取数据库文件。 三、执行流程:SQL 语句 -> 缓存查询 -> 解析器 -> 优化器 -> 执行器 1、缓存查询:Server 如果查找到 SQL 语句有缓存,则返回数据给客户端,否则就执行下一步。 注:MySQL 8.0 将抛弃缓存功能,因为查找缓存的效率不高,只有是在静态数据或数据变化很少的场景下有价值。 2、解析器:对 SQL 进行语句分析、语义分析。 3、优化器: 确认 SQL 语句执行路径,比如根据全表检索还是根据索引来检索。 4、执行器:执行前判断是否有权限,有则执行 SQL 语句返回结果。 四、存储引擎:采用插件的模式,可根据不同的数据处理需要选择不同的存储引擎 InnoDB 存储引擎:支持事务、行级锁定和外键约束。MySQL 5.5.8 版本后默认的存储引擎。 MyISAM 存储引擎:速度快和占用资源少、但不支持事务和外键。MySQL 5.5.8 版本前默认存储引擎。 Memory 存储引擎:主要用于临时数据,因为是使用系统内存作存储介质

被面试官问算法问到自闭!字节跳动Java一面二面经验分享

夙愿已清 提交于 2020-04-22 00:58:36
一面(各种算法) 说一下二叉树,满二叉树, bst avl b+树b树,红黑树的区别 说一下数组链表哈希表的使用场景,时间复杂度,优劣 说一下操作系统用户态和内核态 说一下操作系统虚拟内存 说一下Linux fork()系统调用的过程,要求讲到内存过程 说一下Linux无名管道命名管道的内存过程,底层原理 无名管道产生的过程,原理 Java说出你知道创建字符串的方式,比较性能优劣 说一下jvm线程调度过程, 什么情况会发生抢占 说一下线程通过继承thread和实现runable接口实现的线程,底层有什么区别 说一下cookie和session的区别场景的选择 cookie跨域 说一下xss攻击 算法: 一个长度大小为n的数组,数组中的每个元素的取值范围在[1,n],且为正整数。问:如何在时间复杂度为O(n),空间复杂度为O(1)的条件下,统计数组中不同元素出现的次数。 二面(90分钟超长拉锯战) 说一下Java内存模型 Java内存交互操作 如何保证数据一致性? volatile如何保证数据一致性? valatile的变量两个线程一起操作会发生什么? 联系对象头。 Intel cpu的数据一致性协议是如何保证数据一 致性的? 为什么要有高速缓存,存器,内存? 高速缓存的作用? 寄存器发生了什么? 操作系统系统的读者写者问题? (怼了15分钟)读会发生什么,多个线程读怎么样

MySQL索引、关联子查询与SQL语句的优化技巧

假装没事ソ 提交于 2020-04-17 20:14:37
CDA数据分析师 出品 大家好,欢迎来到小编的MySQL课堂。今天我们一起来看一下MySQL中的索引、关联子查询以及语句的优化技巧。 一、MySQL的索引 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询数据库表中数据。 1、索引的意义 索引用于快速找出在某个字段中有特定值的行。如果不使用索引,MySQL必须从第一条记录开始检索表中的每一条记录,直到找出相关的行,那么表越大,查询数据所花费的时间就越多。如果在表中查询的字段有索引,MySQL能够快速到达一个位置去检索数据文件,而不需要再去查看所有数据,那么将会节省很大一部分查询时间。比如说emp表中1W个员工的记录,要查询salesman的员工信息,如果没有索引,服务器会从表中第一条记录开始,一条条往下遍历,直到找到职位为salesman的员工信息。如果有了索引,它会把job这个字段,通过一定的方法进行存储,在查询这个字段上的信息时,能够快速找到对应的数据,而不需要再遍历1W条记录了。 2、索引的优缺点 所有MySQL的字段类型都可以添加索引,但是索引也不是越多越好,而是要根据业务数据合理的使用。 优点 · 通过索引对数据进行检索,大大提高了数据的查询效率。 缺点 · 创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加。 · 索引也需要占空间的,创建的索引太多,索引文件也会占用数据库的存储空间。

Mysql和Oracle的区别

可紊 提交于 2020-04-17 13:15:25
【推荐阅读】微服务还能火多久?>>> 转自: https://blog.csdn.net/star1210644725/article/details/91899117 一、并发性 并发性是oltp数据库最重要的特性,但并发涉及到资源的获取、共享与锁定。 mysql: mysql以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他session无法更新此表中的数据。 虽然InnoDB引擎的表可以用行级锁,但这个行级锁的机制依赖于表的索引,如果表没有索引,或者sql语句没有使用索引,那么仍然使用表级锁。 oracle: oracle使用行级锁,对资源锁定的粒度要小很多,只是锁定sql需要的资源,并且加锁是在数据库中的数据行上,不依赖与索引。所以oracle对并发性的支持要好很多。 二、一致性 oracle: oracle支持serializable的隔离级别,可以实现最高级别的读一致性。每个session提交后其他session才能看到提交的更改。oracle通过在undo表空间中构造多版本数据块来实现读一致性, 每个session查询时,如果对应的数据块发生变化,oracle会在undo表空间中为这个session构造它查询时的旧的数据块。 mysql: mysql没有类似oracle的构造多版本数据块的机制,只支持read

Java学习进阶之MySQL数据库结构和引擎比对

邮差的信 提交于 2020-04-17 00:29:58
【推荐阅读】微服务还能火多久?>>>   MySQL是最流行的关系型数据库管理系统,有很多Java程序员初学MySQL时都会被其繁杂的操作以及知识结构吓到,接下来好程序员Java培训小编就给大家简单分析MySQL的结构与引擎对比。   MySQL数据库结构   1、最上层的服务并不是MySQL独有的,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构。   2、第二层架构中,大多数的MySQL的核心服务功能都在这一层,包括查询解析、分析、优化、缓存以及所有的内置函数(日期时间等),所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。   3、第三层包含了存储引擎。存储引擎负责MySQL中的数据的存储和提取。MySQL支持各种不同的存储引擎,每个存储引擎都有它的优势和劣势。服务器通过API和存储引擎进行通信。这些API接口屏蔽了不同存储引擎之间的差异,使得这些差异对上层的查询过程透明。存储引擎不会解析SQL(InnoDB是个例外,它会解析外键定义),不同的存储引擎之间也不能互相通信,而只是简单的响应上层服务器的请求!   执行流程   数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。   不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。  

Mysql-死锁排查与解决

流过昼夜 提交于 2020-04-12 10:09:57
导致 mysql 死锁的四个条件: 1 、互斥条件:就是一个资源只能有一个进程占有,不可以被两个或者多个进程占有 2 、不可抢占条件:进程已经获得的资源在未使用完之前,不可以被抢占,只能在使用完之后自己释放 3 、占有申请条件:进程自己已经至少保持一个资源,又请求其他资源,但是这个资源被其他进程占有,而且又不释放自己已经占有的资源 4 、循环等待条件:发生死锁时,必定会形成一个进程——资源的环路。进程集合 {p1 , p2 , p3} 中, p1 请求 p2 占有的资源, p2 请求 p3 占有的资源, p3 请求 p1 占有的资源 解决死锁的方案 第一种: 1. 查询是否锁表 show OPEN TABLES where In_use > 0; 2. 查询进程(如果您有 SUPER 权限,您可以看到所有线程。否则,您只能看到您自己的线程) show full processlist; 3. 杀死进程 id (就是上面命令的 id 列) kill 进程 id 第二种: 1. 查看下在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; 2. 杀死进程 id (就是上面命令的 trx_mysql_thread_id 列 ) kill 进程 id 分析: 1 、查看数据库的隔离级别(一般是 RR : REPEATABLE-READ ):

隐身守侯 提交于 2020-04-11 21:14:59
1、锁 1、全局锁 定义:全局锁就是对整个数据库实例加锁,保证数据库处于只读的状态,客户端断开主动释放锁 命令:Flush tables with read lock 适用的存储引擎:myisam 应用场景:全库备份 其他备份数据库的工具:mysqldump -single-transaction 通过事务保证一致性视图 2、表级锁 适用于不支持行锁的存储引擎,如myisam 2.1、lock 命令:lock table t1 read,t2 write 特点:锁住整个表,锁的粒度大 2.2、MDL( 用于保证DDL操作与DML操作之间的一致性 ) 对一个表进行增删改查的时候,增加MDL读锁 对一个表结构进行更新的时候,增加MDL写锁 读锁之前不互斥(可以有多个线程增删改查),读写之间互斥 注:如果要给一个表增加字段,记得加超时时间,防止一直阻塞,导致数据库宕机 来源: oschina 链接: https://my.oschina.net/u/2610056/blog/3229748

my.cnf, my-small.cnf, my-medium.cnf, my-large.cnf

会有一股神秘感。 提交于 2020-04-10 14:36:07
1. my-small.cnf # Example MySQL config file for small systems. # # This is for a system with little memory (<= 64M) where MySQL is only used # from time to time and it's important that the mysqld daemon # doesn't use much resources. # # MySQL programs look for option files in a set of # locations which depend on the deployment platform. # You can copy this option file to one of those # locations. For information about these locations, see: # http://dev.mysql.com/doc/mysql/en/option-files.html # # In this file, you can use all long options that a program supports. # If you want to know which

MySQL数据库面试题(2020最新版)

蹲街弑〆低调 提交于 2020-04-09 17:14:32
文章目录 数据库基础知识 为什么要使用数据库 什么是SQL? 什么是MySQL? 数据库三大范式是什么 mysql有关权限的表都有哪几个 MySQL的binlog有有几种录入格式?分别有什么区别? 数据类型 mysql有哪些数据类型 引擎 MySQL存储引擎MyISAM与InnoDB区别 MyISAM索引与InnoDB索引的区别? InnoDB引擎的4大特性 存储引擎选择 索引 什么是索引? 索引有哪些优缺点? 索引使用场景(重点) 索引有哪几种类型? 索引的数据结构(b树,hash) 索引的基本原理 索引算法有哪些? 索引设计的原则? 创建索引的原则(重中之重) 创建索引的三种方式,删除索引 创建索引时需要注意什么? 使用索引查询一定能提高查询的性能吗?为什么 百万级别或以上的数据如何删除 前缀索引 什么是最左前缀原则?什么是最左匹配原则 B树和B+树的区别 使用B树的好处 使用B+树的好处 Hash索引和B+树所有有什么区别或者说优劣呢? 数据库为什么使用B+树而不是B树 B+树在满足聚簇索引和覆盖索引的时候不需要回表查询数据, 什么是聚簇索引?何时使用聚簇索引与非聚簇索引 非聚簇索引一定会回表查询吗? 联合索引是什么?为什么需要注意联合索引中的顺序? 事务 什么是数据库事务? 事物的四大特性(ACID)介绍一下? 什么是脏读?幻读?不可重复读? 什么是事务的隔离级别

时势造英雄、仅此怀念伟大人(第十四周)

本秂侑毒 提交于 2020-04-07 14:34:20
一、 导入hellodb.sql生成数据库 1、打开数据库,然后使用mysql uroot -predhat打开数据库; 2、导入数据内容;rz导入hellodb_innodb数据库; 3、导入数据内容,数据库出现hellodb数据库; (1) 在students表中,查询年龄大于25岁,且为男性的同学的名字和年龄; (2) 以ClassID为分组依据,显示每组的平均年龄; (3) 显示第2题中平均年龄大于30的分组及平均年龄; (4) 显示以L开头的名字的同学的信息; 二、数据库授权magedu用户,允许192.168.1.0/24网段可以连接mysql 测试 三、总结mysql常见的存储引擎以及特点。 MyISAM ①不支持事务 ②表级锁定 ③读写相互阻塞,写入不能读,读时不能写 ④只缓存索引 ⑤不支持外键约束 ⑥不支持聚簇索引 ⑦读取数据较快,占用资源较少 ,不支持MVCC(多版本并发控制机制)高并发 ⑧崩溃恢复性较差 ⑨MySQL5.5.5前默认的数据库引擎 ,查询速度快、存储空间小,原因是在磁盘上分成三个文件存储:.frm(存储表定义),.MYD(MYData,存储数据),.MYI(MYIndex,存储索引),SELECT COUNT() FROM TABLE时,避免了全表扫描。 1、MyISAM存储引擎适用场景 只读(或者写较少)、表较小(可以接受长时间进行修复操作)