随笔分类 -  数据库

摘要:sql执行流程 MySQL可以分为Server层和存储引擎两部分 Server层包含连接器,查询缓存,分析器,优化器,执行器等,涵盖了MySQL的大多数的核心服务功能,以及所有的内置函数(如日期,时间,数学,和加密函数等),所有的跨存储引擎的功能都在这一层实现,比如存储过程,触发器,试图等 存储引擎 阅读全文
posted @ 2021-04-24 21:07 i%2 阅读(55) 评论(0) 推荐(0)
摘要:mysql主从复制 #从节点执行 change master to master_host='1.0.0.3',(这里最好使用ip,其实写主机的也是可以的,但是一个局域网内主机名很多相同的话,会找不到) master_port=3306, master_user='zyh', master_pass 阅读全文
posted @ 2021-04-24 21:06 i%2 阅读(59) 评论(0) 推荐(0)
摘要:MyISAM与InnoDB的区别 InnoDB支持事务,MyISAM不支持。InnoDB会将每条sql封装成事务,因此最好将所有sql放在begin和commit之间。 InnoDB支持外键,MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败 InnoDB不保存表的具体行数,M 阅读全文
posted @ 2021-04-24 21:02 i%2 阅读(48) 评论(0) 推荐(0)
摘要:sql怎么优化 建索引。目的是为了避免全表扫描,经常用到(where、groupby、orderby语句中)、很少修改的字段建索引,也不是越多越好,越多占用空间越大,DML操作性能越受损。 尽量不用select * 有连接操作时: 尽量用小表驱动大表,如left join左边最好放小表 尽量用内连接 阅读全文
posted @ 2021-04-23 23:21 i%2 阅读(65) 评论(0) 推荐(0)
摘要:事务的实现原理 锁 mysql在读写操作的时候锁定,commit或rollback时候解锁 行(记录)锁:解决并发写的问题(可重复读级别)。若要操作的行是有索引的,则会直接在索引字段找到并加行锁;无索引加行锁的方式是:先锁整张表,然后过滤非操作行,留下的就是行锁,故而性能较差,大表建议加索引。 ​ 阅读全文
posted @ 2021-04-23 23:20 i%2 阅读(50) 评论(0) 推荐(0)
摘要:事务的四大性质和隔离级别 什么是事务:一系列严密的操作,要么全部成功,要么全部失败。mysql只有Innodb引擎才支持事务,事务最终目的是要保障数据的可靠性、一致性 四大性质(ACID) 原子性(Atomicity):要么全成功,要么全失败回滚 一致性(Consistency):一个事务执行前后处 阅读全文
posted @ 2021-04-23 23:18 i%2 阅读(47) 评论(0) 推荐(0)
摘要:数据库优化工作 数据选型:合适的字段、类型,表越小查得越快。 范式应用:合理应用三范式和反三范式 存储引擎的选择:比如mysql若专门读取,可以使用myisam,需要写、事务操作选用innodb 索引优化:常用字段建立索引,使用时尽量覆盖索引、使用唯一索引、避免索引失效。还可以采用explain分析 阅读全文
posted @ 2021-04-20 21:05 i%2 阅读(70) 评论(0) 推荐(0)
摘要:为什么生产环境中B+树的高度总是3-4层? 这里我们先假设 B+ 树高为 2,即存在一个根节点和若干个叶子节点,那么这棵 B+ 树的存放总记录数为:根节点指针数 * 单个叶子节点记录行数。 上文我们已经说明单个叶子节点(页)中的记录数 =16K/1K=16。(这里假设一行记录的数据大小为 1k,实际 阅读全文
posted @ 2021-04-20 21:04 i%2 阅读(596) 评论(0) 推荐(0)
摘要:mysql的join原理 ​ Nested-Loop Join 算法,需要区分驱动表和被驱动表,先访问驱动表,筛选出结果集,然后将这个结果集作为循环的基础,访问被驱动表过滤出需要的数据。 ​ 算法这两种表分为驱动表和被驱动表,使用嵌套循环。驱动表在外循环,被驱动表在内循环。 SNLJ,Simple 阅读全文
posted @ 2021-04-20 21:02 i%2 阅读(79) 评论(0) 推荐(0)
摘要:聚集索引和非聚集索引的区别 聚集(clustered)索引,也叫聚簇索引。聚集索引的逻辑顺序与磁盘上行的物理存储顺序相同(因此Inodb叶子节点可以直接保存数据),非聚集索引不同。 非聚集索引的二次查询(回表)问题 使用以下语句进行查询,不需要进行二次查询,直接就可以从非聚集索引的节点里面就可以获取 阅读全文
posted @ 2021-04-20 21:01 i%2 阅读(76) 评论(0) 推荐(0)
摘要:mysql隔离级别的实现原理 读未提交没有额外隔离实现,简单粗暴 串行化直接上共享锁,效率低,但隔离效果好。 可重复读隔离级别(读已提交)利用MVCC做版本控制,每个事务都会有当前数据库的快照 InnoDB 利用了“所有数据都有多个版本”的这个特性,实现了“秒级创建快照”的能力。 在时间线上,每个事 阅读全文
posted @ 2021-04-20 21:00 i%2 阅读(56) 评论(0) 推荐(0)
摘要:mysql数据备份与恢复 mysqldump命令 在安装目录/data/哪个数据库下的ibdata*, *.ibd, *.frm, *.ib_logfile,所以备份这些文件即可备份InnoDB的数据,另外别忘了将MySQL的配置文件my.cnf也一并备份起来。 mysql主从复制 #从节点执行 c 阅读全文
posted @ 2021-04-20 20:59 i%2 阅读(45) 评论(0) 推荐(0)
摘要:sql执行流程 MySQL可以分为Server层和存储引擎两部分 Server层包含连接器,查询缓存,分析器,优化器,执行器等,涵盖了MySQL的大多数的核心服务功能,以及所有的内置函数(如日期,时间,数学,和加密函数等),所有的跨存储引擎的功能都在这一层实现,比如存储过程,触发器,试图等 存储引擎 阅读全文
posted @ 2021-04-20 20:58 i%2 阅读(57) 评论(0) 推荐(0)
摘要:Innodb中的线程 Master Thread Master Thread具有最高的线程优先级别,内部由多个循环组成:主循环(loop)、后台循环(background loop)、刷新循环(flush loop)、暂停循环(suspend loop),Master Thread会根据数据库运行的 阅读全文
posted @ 2021-04-20 20:56 i%2 阅读(50) 评论(0) 推荐(0)