MyISAM

MySQL基础架构之查询语句执行流程

…衆ロ難τιáo~ 提交于 2021-01-18 06:53:49
这篇笔记主要记录mysql的基础架构,一条查询语句是如何执行的。 比如,在我们从student表中查询一个id=2的信息 select * from student where id=2; 在解释这条语句执行流程之前,我们看看mysql的基础架构。 图来自极客时间的mysql实践,该图是描述的是MySQL的逻辑架构。 server层包括连接器、查询缓存、分析器、优化器、执行器涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视等。 存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory 等多个存储引擎,平常我们比较常用的是innoDB引擎 连接器 我们在使用数据库之前,需要连接到数据库,连接语句是 mysql -h $ip -u $username -p $password 而我们的连接器就是处理这个过程的,连接器的主要功能是 负责跟客户端建立连接、获取权限、维持和管理连接 ,连接器在使用的过程中如果该用户的权限改变,是不会马上生效的,因为用户权限是在连接的时候读取的,只能重新连接才可以更新权限 连接器与客户端通信的协议是 tcp 协议的,连接以后可以使用 show processlist; 看到执行的连接数 同时在连接时间内超过8小时是sleep的状态会自动断开

一条MySQL查询语句的执行流程

强颜欢笑 提交于 2021-01-18 06:32:41
这篇笔记主要记录mysql的基础架构,一条查询语句是如何执行的。 比如,在我们从student表中查询一个id=2的信息: select * from student where id = 2; 在解释这条语句执行流程之前,我们看看MySQL的基础架构。 MySQL的逻辑架构 Server层包括连接器、查询缓存、分析器、优化器、执行器 ,涵盖 MySQL 的大多数核心服务功能,以及所有的 内置函数 ,所有 跨存储引擎的功能 都在这一层实现,比如存储过程、触发器、视图等。 存储引擎层负责数据的存储和提取 。其架构模式是插件式的,支持InnoDB、MyISAM、Memory 等多个存储引擎,MySQL默认的存储引擎是InnoDB。 1, 连接器 我们在使用数据库之前,需要连接到数据库,连接语句是 mysql -h $ip -u $username -p $password 而我们的连接器就是处理这个过程的,连接器的主要功能是 负责跟客户端建立连接、获取权限、维持和管理连接 ,连接器在使用的过程中如果该用户的权限改变,是不会马上生效的,因为用户权限是在连接的时候读取的,只能重新连接才可以更新权限 连接器与客户端通信的协议是 tcp 协议的,连接以后可以使用 show processlist; 看到执行的连接数 MySQL [abc]> show processlist; +------+

560字带你彻底搞懂:MySQL的索引优化分析

风格不统一 提交于 2021-01-16 23:53:55
正文 一、SQL分析 性能下降、SQL慢、执行时间长、等待时间长 查询语句写得差 索引失效 关联查询太多join(设计缺陷) 单值索引 :在user表中给name属性创建索引,create index idx_name on user(name); 复合索引 :在user表中给name、email属性创建索引,create index idx_name_email on user(name,email); 服务器调优 及各个参数设置(缓冲、线程数等) 二,join查询 1,SQL执行顺序 a)手写SQL b)机读 c)总结 2,JOIN查询 a)建表语句 b)满足条件的join语句 #左连接 SELECT * FROM tbl_dept t1 LEFT JOIN tbl_emp t2 on t1.id = t2.deptId; #右连接 SELECT * FROM tbl_dept t1 RIGHT JOIN tbl_emp t2 on t1.id = t2.deptId; #内连接(交集) SELECT * FROM tbl_dept t1 INNER JOIN tbl_emp t2 on t1.id = t2.deptId; #左连接(只取A独有的) SELECT * FROM tbl_dept t1 LEFT JOIN tbl_emp t2 on t1.id = t2

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的默认存储引擎

最常问的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恢复速度快。可直接用备份覆盖恢复。 如果系统读少,写多的时候

一位资深php程序员在北京的面试30个题目

别等时光非礼了梦想. 提交于 2021-01-13 16:56:19
面试题集锦: 1、SESSION 保存在服务器的哪里? 2、服务端是如何获取客户端的cookie? 3、如何实现SESSION共享,共享的原理是什么? 4、请大致说出LVS搭建的过程,文件共享原理是什么? 5、网络共享服务器上传数据是向一台服务器上传?还是多台?如何实现同步? 6、说出你所知道的数据库设计范式?常用的建模工具是什么?(mysql建模工具) 7、如果你是项目经理,你如何管理你的项目团队的日常事宜? 8、主从数据库的配置,都需要哪些基本的条件,需要配置什么内容? 9、说出你常用的版本控制器,SVN中需要配置哪几个配置文件 10、LVS 在项目运行之前需要注意哪些事项,或者说会出现什么问题? 11、ecshop为何出现字段冗余违犯设计模式,请说出为何这么做? 12、常用mysql优化方式,尽可能多的说? 13、memcache原理是什么?是否能存入2M的value? 14、什么是队列?排它锁,Myisam 死锁如何解决? 15、请说出mysql常用存储引擎?memory存储引擎的特点? 16、如何最快速的插入5000条以上的数据? 17、你用过多少开源框架? 18、ecshop 购物车信息存放在哪里? 19、 PHP 生成页面缓存的原理 20、你所知道的缓存技术有哪些,分别做下简单介绍 1、SESSION 保存在服务器的哪里? 答:通过 php .ini指定

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. 从抽象角度看,主存是一系列的存储单元组成的矩阵

还在使用kill -9 pid结束spring boot项目吗?那你已经落伍了!

百般思念 提交于 2021-01-13 15:51:14
作者:流星007 blog.csdn.net/qq_33220089/article/details/105708331 kill -9 pid ??? kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或jobs指令查看(这段话来自菜鸟教程)。 讲的这个复杂,简单点来说就是用来杀死linux中的进程,啥?你问我啥是进程?请自行百度。 我相信很多人都用过 kill -9 pid 这个命令,彻底杀死进程的意思,一般情况我们使用它没有上面问题,但是在我们项目中使用它就有可能存在致命的问题。 kill -9 pid 带来的问题 由于kill -9 属于暴力删除,所以会给程序带来比较严重的后果,那究竟会带来什么后果呢? 举个栗子:转账功能,再给两个账户进行加钱扣钱的时候突然断电了?这个时候会发生什么事情?对于InnoDB存储引擎来说,没有什么损失,因为它支持事务,但是对于MyISAM引擎来说那简直就是灾难,为什么?假如给A账户扣了钱,现在需要将B账户加钱,这个时候停电了,就会造成,A的钱被扣了,但是B没有拿到这笔钱,这在生产环境是绝对不允许的,kill -9 相当于突然断电的效果。 当然了,像转账这种,肯定不是使用MyISAM引擎,但是如今分布式火了起来