| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> mysql复习 -> 正文阅读 |
|
[大数据]mysql复习 |
目录 mysql架构mysql架构分为四层: 1.连接层:负责接收客户端的连接,授权,认证 2.服务层:接收sql负责调用函数,存储过程,触发器等,对sql的执行顺序,排序,优化,如果是查询操作,还可以从缓存中先查询数据,提高性能。 3.引擎层:引擎是真正具体执行者,mysql提供不同的执行引擎,不同的引擎特点不同,根据需要选择即可 4.物理文件存储层:在硬盘上存储系统文件,表数据,各种日志文件等。 mysql引擎引擎就是实际存储数据的机制,不同的引擎,机制不同,(例如索引,锁等) 根据不同的需要,选择不同的引擎。 mysql中常用的存储引擎;innodb:默认的存储引擎,支持事务,支持行锁,支持外键,支持缓存,不存储表的总行数。 myisam:不支持事务,不支持行锁,只支持表锁,不支持外键,不支持缓存,存储表的总行数。 索引索引可以理解为书的目录 主键默认是添加索引的,索引是帮助mysql高效获取数据的数据结构。B+ 主键,维护在一个b+树中,保存这条记录的物理地址。 索引优点:提高了查询效率,(有b+树排序,把索引数据加载到内存中)减少io次数 索引使用了b+树结构,是有序的,排序时比较快捷方便,减少cpu消耗 索引缺点:索引也是需要空间来存储维护的 执行新增,修改,删除操作时,需要对索引结构进行更新。 添加索引的原则:那些情况适合建立索引: 主键:默认添加唯一索引,作为查询条件的列。 作为外键关联的列,排序的列,分组的列 那些情况不适合建立索引:表记录很少(例如系统参数设置表),不作为查询条件的列,增删改较为频繁的表,最好为需要的列来添加,数据重复较高的比如说性别。 索引分类:主键索引:primary key,主键列自动添加索引。 单值或者单列索引:一个索引对应一个列 唯一索引:索引列的值必须唯一 组合索引;一个索引中包含多个列 例如a,b,c 3列,a,b列创建了组合索引,在查询的时候,必须要满足最左侧索引原则,否则索引失效 全文索引:mysql8之后,innodb引擎开始支持全文索引,使用全文索引可以代替like,实现模糊查询,索引不会失效。 mysql索引的数据结构: mysql使用的是b+树结构存储索引,b+树是有序的,每个节点可以存储多个数据(横向拓展)用宽度代替高度,非叶子节点不存储数据,只存储索引,一共节点中就可以存储多个索引,所有数据存储在叶子节点中,每个叶子节点之间有指针指向,有序节省排序时间,一个节点存储多个元素,树的高度降低了,叶子节点之间有指针,便于区间范围查询,例如a>10 聚簇索引和非聚簇索引: 聚簇索引:找到了索引就找到了数据,例如innodb索引和数据在同一个文件中,找到了索引就找到了数据,使用主键作为条件查询,使用其他的列查询,查询结果只有自己。 非聚簇索引:找到了索引,还需要回表查询,例如myisam引擎中索引和数据在不同的两个文件中,找到了索引,就知道了位置,需要去存数据的表中查询数据。使用其他列查询,查询结果除了本列,还存在其他列,这种情况需要通过该列先找到主键,再通过主键再次回表查询。 事务事务就是一次数据库操作中的若干单元的管理,事务管理的目标是完整性。一次中的若干操作要么都成功,要么都失败。 事务管理的特征ACID 原子性atomic A 一致性 consistency C 隔离性Islation I 持久性 Durability D 原子性:就是要保持一次操作中的多条语句要么都执行成功,要么都执行失败。 隔离性;控制多个事务在并发读写时,保证互不影响,隔离级别有四种:读 未提交;读 已提交;可重复读;串行化; 持久性:持久性就是将数据持久化到硬盘上,不可回滚 一致性;保证数据操作的完整性 1.读 未提交:一个事务可以读到另一个事务还未提交的数据 问题:可能会出现脏读,另一个事务可能会回滚,这样读到的数据称为脏数据, 设置隔离级别:set global 。。。。 2.读 已提交;一个事务能读到另一个事务已经提交的数据 读已提交 解决了脏读问题 读已提交 会带来不可重复读问题,事务开始的时候读到一共数据,例如为10,在此期间另一个事务将数据修改为了20,也提交了,此时事务再次查询结果发生了变化,没有读到上一次的数据,这种情况称为不可重复读。 3.可重复读:一个事务开始时,读到了一个数据,在事务中继续执行再次读数据时,读到的数据与第一次是一致的。 解决了不可重复读的问题 为什么用隔离级别?解决了什么问题? 4.串行化:对表进行操作时,只能是一个事务执行,如果有一个事务在执行中,即时是读操作,其他事务也必须等待。 事务的实现原理: 1.原子性 执行了一个修改操作,后来又回滚了,那么数据需要直到执行前是什么样子的,执行增删改操作的时候,使用undolog记录一个相反的操作,insert《---》delete update b---》a 《---》update a--》b 这样在事务回滚时,可以借助日志信息进行还原。 2.隔离界别 3.持久化(了解) mysql对数据操作时,并不是立即将数据写入磁盘,这样io多,效率低。 数据又不能一直存在缓存中,万一服务器宕机了,那么数据就不存在了。 mysql提供了redolog日志,可以将数据先暂时保存在日志中,记录那些数据发生了修改,定期将日志数据写到磁盘。 锁可以按照粒度分为:行锁,间隙锁,表锁 行锁:一个事务在对某行数据进行操作(写操作),其他事务不能对此行进行操作,把这行锁住。 MySQL中innodb引擎支持行锁,myisam不支持 好处:并发性好,安全 不足:加锁次数多,效率会低 表锁:一个事务对某一行操作时,会将整个表锁定,其他事务就不能操作了。innodb表锁默认没开,myisam支持表锁,不支持行锁 并发性低,加锁频率少。 间隙锁:对于某个区间去给他加锁。在查询一个范围的时候,会对这个范围进行加锁。 例如 select name from user where age>10 and age<20 排他锁:真正意义上加锁,有事务进行写操作时,其他事务不能执行。 在执行新增,修改,删除的时候,自动加锁。 查询语句如果有需要的话,也可以加排他锁, select * from user where id=5 for update 共享锁:也称读锁,为查询语句添加共享锁后,其他事务也可以添加共享锁,但是其他事务就不能再添加排他锁了 sql优化与数据库优化有区别,数据库优化,库的设计,分库分表等。 优化sql可以提高查询效率, 几种优化方案: 1.添加适当索引,添加索引的原则: 2.应尽量避免索引失效,组合索引下,不满足最左前缀原则 like 模糊查询 以null为条件的查询, where num is null 避免使用!=否则索引失效 使用or进行连接查询,导致索引失效 在where中使用函数,表达式,导致索引失效 3.状态字段,流程,尽量使用整数类型 0 通过,1不通过,0 男,1女 4.定长用char,变长用varchar 5.尽量少用select * 想要啥就查啥。 6.尽量避免一次性查询过多的数据 7.尽量避免值为null,可以赋默认值,null是会占空间的,在count()统计的时候,不计数 执行计划:sql发送给服务器,在服务器内部如何执行,执行流程是怎么样的,限制性谁,有没有用到索引等等。 使用explain关键字,添加到查询语句前面,输出sql执行过程的参数 id sql执行顺序,例如有嵌套的子查询, 主查询id=1,子查询id=2,表名,子查询是先执行的。 select type表示查询的结构,simple简单查询,primary主查询,subquery子查询 type查询性能指标 system>const>eq_ref>ref>range>index>all system表中只有一条记录,const通过索引一次性可以找到 ref使用了索引,例如查姓名,查询出来可能有多条数据, range使用了索引,范围查询 index类型只遍历索引树 all全表查询,索引失效,查询了所有数据 innodb中的索引策略?,覆盖索引,最左前缀原则,索引下推索引覆盖:是指在普通索引中可以得到查询的结果,不需要再回到主键索引树中再次搜索。覆盖索引是最常使用点数据查询技术,可以极大提供数据库性能,1.减少树的搜索次数,提升性能2.索引的数量远小于数据的数量,在索引树上的读取会极大减小数据库的访问量。 这里可以扯3个日志,都是干啥的,MySQL基本架构。 sql优化的一般步骤?MySQL执行计划怎么看?字段含义 show?status命令了解各种sql的执行频率, b树和b+树的区别,MySQL为什么使用b+树,为什么不用二叉树 b树,节点排序,一个节点可以存多个元素,这一个节点内的多个节点也是排序的。 外链接,左外连接,右外链接,内链接。等值连接 什么是引擎?innodb和myisam区别 引擎就是存储数据的机制,不同的引擎,机制不同。 数据库设计的三大范式 redolog??undolog?binlog binlog是二进制日志文件,记录了MySQL所有修改数据库的操作,然后以二进制的形式存记录在日志文件中,其中还包括每条语句执行的时间所消耗的资源等,以及相关的事物信息。 sql注入的原理是将sql代码伪装到输入参数中,传递到服务器解析并执行的一种攻击手法。 MySQL锁有哪些 按锁的粒度分为行锁,锁住某行数据,粒度小,并发度高 事物的基本特性和隔离级别 什么是事物 事务分类 索引 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/16 1:30:20- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |