
MySQL数据库
文章平均质量分 93
对MySQL数据库的操作使用、底层原理的解析记录
张维鹏
这个作者很懒,什么都没留下…
展开
-
MySQL数据库常见面试题总结
1、数据库中的范式:(1)第一范式(1NF):指表的列不可再分,数据库中表的每一列都是不可分割的基本数据项,同一列中不能有多个值;(2)第二范式(2NF):在 1NF 的基础上,还包含两部分的内容:一是表必须有一个主键;二是表中非主键列必须完全依赖于主键,不能只依赖于主键的一部分;(3)第三范式(3NF):在2NF 的基础上,消除非主键列对主键的传递依赖,非主键列必须直接依赖于主键。(4)BC范式(BCNF):在 3NF 的基础上,消除主属性对于码部分的传递依赖2、SQL语句的执..原创 2021-03-07 17:41:32 · 65389 阅读 · 20 评论 -
MySQL数据库:索引的实现原理
一、MySQL索引的数据结构:常见的索引的数据结构有:B+Tree、Hash索引。1、Hash索引:MySQL中,只有Memory存储引擎支持hash索引,是Memory表的默认索引类型。hash索引把数据以hash值形式组织起来,因此检索效率非常高,可以一次定位。hash索引的缺点:(1)Hash索引仅能满足等值的查询,不能满足范围查询、排序。因为数据在经过Hash算法后,其大小关系就可能发生变化。(2)当创建组合索引时,不能只适用组合索引的部分列进行查询。因为hash索引是把多原创 2018-06-25 10:22:41 · 14840 阅读 · 4 评论 -
MySQL数据库:SQL优化与索引优化
一、索引优化规则:1、union、in、or 都能够命中索引,建议使用 in:(1)union:能够命中索引,并且MySQL耗费的CPU最少。select * from doc where status=1union allselect * from doc where status=2;(2)in:能够命中索引,查询优化耗费的CPU比union all多,但可以忽略不计,一般情况下建议使用in。select * from doc where status in...原创 2018-11-25 02:36:55 · 24522 阅读 · 13 评论 -
MySQL数据库:表结构优化
减少 IO 次数可以在很大程度上提高数据库操作的性能。由于MySQL数据库是基于行存储的数据库,而数据库IO操作的时候是以 page 的方式,也就是说,如果我们每行记录所占用的空间量减小,就会使每个 page 中可存放的数据行数增大,那么每次 IO 可访问的行数也就增多了。反过来说,处理相同行数的数据,需要访问的 page 就会减少,也就是 IO 操作次数降低,直接提升性能。此外,由于我们的内存是有限的,增加每个page中存放的数据行数,就等于增加每个内存块的缓存数据量,同时还会提升内存换中数据命中的几率原创 2018-11-24 01:04:35 · 16842 阅读 · 0 评论 -
MySQL数据库:参数优化
数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作。而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级。所以,要优化数据库,首先第一步需要优化的就是 IO,尽可能将磁盘IO转化为内存IO。本文先从 MySQL 数据库IO相关缓存参数的角度来介绍可以通过哪些参数进行IO优化:一、参数说明:1、query_cache_size / query_cache_type (global):Query cache 主要.原创 2021-03-08 02:26:20 · 14274 阅读 · 1 评论 -
MySQL数据库:SQL语句的执行过程
一、客户端的MySQL驱动:我们的系统在和 MySQL 数据库进行通信前,需要先和数据库建立连接,而这个功能就是由MySQL驱动底层帮我们完成的,建立完连接之后,我们只需要发送 SQL 语句就可以执行 CRUD 了。如下图所示:一次 SQL 请求就会建立一个连接,多个请求就会建立多个连接。假设我们的系统是部署在 tomcat 容器中的,tomcat 是可以并发处理多个请求的,这就会导致多个请求会去建立多个连接,然后使用完再都去关闭,这样会有什么问题呢?Java系统在通过 MySQL 驱动 和 .原创 2021-02-28 23:56:20 · 22062 阅读 · 11 评论 -
MySQL数据库:事务和ACID实现原理
数据库的事务是并发控制的基本单位,是指逻辑上的一组操作,要么全部执行,要么全部不执行。1、事务的特性:(1)原子性:事务是一个不可分割的工作单元,事务里的操作要么都成功,要么都失败,如果事务执行失败,则需要进行回滚。(2)隔离性:事务的所操作的数据在提交之前,对其他事务的可见程度。(3)持久性:一旦事务提交,它对数据库中数据的改变就是永久的。(4)一致性:事务不能破坏数据的完整性和业务的一致性。原创 2018-11-19 00:25:55 · 15437 阅读 · 1 评论 -
MySQL数据库:锁机制
MySQL锁机制的基本工作原理就是,事务在修改数据库之前,需要先获得相应的锁,获得锁的事务才可以修改数据;在该事务操作期间,这部分的数据是锁定,其他事务如果需要修改数据,需要等待当前事务提交或回滚后释放锁。(1)按锁的粒度划分:表级锁、行级锁、页级锁;(2)按锁的类型划分:共享锁(S锁)、排他锁(X锁);(3)按锁的使用策略划分:乐观锁、悲观锁;原创 2018-11-26 01:19:00 · 10949 阅读 · 7 评论 -
MySQL数据库:主从复制Replication
MySQL主从复制的原理:Slave从Master获取binlog二进制日志文件,然后再将日志文件解析成相应的SQL语句在从服务器上重新执行一遍主服务器的操作,通过这种方式来保证数据的一致性。由于主从复制的过程是异步复制的,因此Slave和Master之间的数据有可能存在延迟的现象,只能保证数据最终的一致性。在master和slave之间实现整个复制过程主要由三个线程来完成原创 2018-12-26 14:57:56 · 8480 阅读 · 0 评论 -
MySQL数据库:读写分离
读写分离解决的是,数据库的写操作,影响了查询的效率,所以读写分离适用于读远大于写的场景。读写分离的实现基础是主从复制,主数据库利用主从复制将自身数据的改变同步到从数据库集群中,然后主数据库负责处理写操作(当然也可以执行读操作),从数据库负责处理读操作,不能执行写操作。并可以根据压力情况,部署多个从数据库提高读操作的速度,减少主数据库的压力,提高系统总体的性能。原创 2018-12-26 16:19:11 · 17512 阅读 · 0 评论 -
MySQL数据库:分区Partition
分区就是将表的数据按照特定规则存放在不同的区域,也就是将表的数据文件分割成多个小块,在查询数据的时候,只要知道数据数据存储在哪些区域,然后直接在对应的区域进行查询,不需要对表数据进行全部的查询,提高查询的性能。同时,如果表数据特别大,一个磁盘磁盘放不下时,我们也可以将数据分配到不同的磁盘去,解决存储瓶颈的问题,利用多个磁盘,也能够提高磁盘的IO效率,提高数据库的性能常见的分区类型有:Range分区、List分区、Hash分区、Key分区原创 2018-12-25 17:15:17 · 20651 阅读 · 0 评论 -
MySQL数据库:explain执行计划详解
执行计划:执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的。使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的select 语句或是表结构的性能瓶颈,让我们知道select 效率低下的原因,从而改进我们的查询。explain的结果如下:下面是有关各列的详细...原创 2018-11-22 15:22:01 · 13360 阅读 · 0 评论 -
MySQL数据库的性能优化总结
数据库的优化方法:1、设计符合范式的数据库;2、选择合适的存储引擎;3、SQL表结构、字段优化;4、SQL语句优化与索引优化;5、读写分离:主数据库负责写操作,从数据库负责读操作。6、分库分表:垂直切分与水平切分。7、分区:将表的数据按照特定的规则放在不同的分区,提高磁盘的IO效率,提高数据库的性能。8、数据库参数优化:IO参数、CPU参数;9、硬件;10、数据库集群;原创 2018-12-26 21:02:12 · 22335 阅读 · 2 评论 -
MySQL数据库:范式
按照“数据库规范化”对表进行设计,其目的就是减少数据库中的数据冗余,以增加数据的一致性。常见的范式有1NF、2NF、3NF、BCNF。下面对这几种常见的范式进行简要分析。 1、1NF(第一范式):第一范式,就是数据表的列不可再分,数据库表中的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。看下面数据表,对于选课列明显是可...转载 2018-07-05 22:13:26 · 12917 阅读 · 0 评论 -
MySQL数据库:存储引擎
一、什么是存储引擎:数据库存储引擎是数据库底层软件组织,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。MySql的核心就是存储引擎,存储引擎是基于表的,而非数据库。(1)查看Mysql的存储引擎信息:mysql > show engines;查...原创 2018-06-24 19:55:04 · 10923 阅读 · 0 评论 -
MySQL数据库:视图View
一、视图的定义:视图(View)是从一个或者多个表(或视图)导出的表,其内容由查询定义。视图是一个虚拟表,数据库中只存储视图的定义,不存储视图对应的数据,在对视图的数据进行操作时,系统根据视图的定义去操作相应的基本表。可以说,视图是在基本表之上建立的表,它的结构和内容都来自基本表,依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上...原创 2018-11-28 01:03:50 · 9762 阅读 · 0 评论 -
MySQL数据库:存储过程Procedure
一、存储过程:SQL语句需要先编译然后执行,而存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用它。存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编...原创 2018-11-27 23:20:12 · 8844 阅读 · 0 评论 -
MySQL数据库:触发器Trigger
一、什么是触发器:触发器是与表有关的数据库对象,当触发器所在表上出现指定事件并满足定义条件的时候,将执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。触发器是一个特殊的存储过程,不同的是存储过程要用call来调用,而触发器不需要使用call,也不需要手工调用,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制...原创 2018-11-28 19:18:43 · 20503 阅读 · 0 评论 -
MySQL数据库:游标Cursor
一、什么是游标:游标,就是游动的标识,可以充当指针的作用,使用游标可以遍历查询数据库返回的结果集中的所有记录,但是每次只能提取一条记录,即每次只能指向并取出一行的数据,以便进行相应的操作。例如:我们写一条select查询语句,按理上会一下子给我们查询出所有的结果。这时候我们想对每一条查询的结果数据进行一条条获取并筛选,这时候我们相当于对查询的结果集进行筛选,那么这个过程就需要使用到游...原创 2018-11-28 21:22:49 · 12977 阅读 · 0 评论 -
MySQL自增主键auto_increment原理 与 自增主键出现间隙不连续现象的定位
MySQL自增主键auto_increment原理;MySQL的innodb_autoinc_lock_mode参数说明;MySQL的AUTO-INC锁原理;自增主键出现间隙不连续现象的定位;原创 2021-06-05 17:49:59 · 17126 阅读 · 10 评论