Mysql 进阶学习笔记

目录

 

MySQL体系结构和引擎

范式:

索引

索引的使用:

视图:

触发器:

SQL优化步骤:

SQL优化:

应用优化:

内存管理及优化:

Mysql锁

SQL技巧:

Mysql日志:

Mysql复制:

MySQL体系结构和引擎

整个流程是,上层代码获取连接池连接,数据库获取sql语句,解析,自动优化,放入缓存。调用存储引擎。在底层文件系统操作数据。

存储引擎:

重点看InnoDB和MyISAM。都是表级的索引,而非数据库级别

InnoDB特性:外键。

InnoDB存储方式:

InnoDB还支持事务。

MyISAM:

以下两个仅了解:

 

范式:

以下表为例:

系这一列不满足第一范式,因为这一列又分割成了两列,所以修改后如下:

满足第一范式之后依旧存在的问题:

 

因此考虑如何满足第二范式:

因为学号和课程名称可以确定其他所有列是唯一,所以这两个接近码,不过这个码并没有实现完全依赖,即单学号就可以确定姓名,姓名不依赖于课程。所以要消除部分依赖。因此要对表进行拆分。

改造后满足第二范式,但不满足第三范式:需要消除传递依赖即系名依赖于学号,系主任依赖于系名。因此需要再拆分出一张表。

 

索引

简单概念看图,索引如何加快查找。innodb底层由B+树实现。

B树的构造:

B+树

索引的分类:

创建索引:默认自动创建主键索引的

 

索引设计原则:

索引的使用:

注意查询复合索引时的具体列。最左原则,必须要复合索引的第一个列才会使用索引。

解决方案:仅查找索引内的列:覆盖索引

如果查的列,某一条数据占用的比例较大,比如99%都是,则不走索引。

底层会自动判断走不走,主要看数据占数据表的比例。多则不走索引。

查看索引使用情况:

视图:

触发器:

SQL优化步骤:

查询特定表的影响的行数:global是历史以来,不加为当前连接。

这个id指定了表实际的查询顺序。

从上往下,效率越来越低。

filesort和temporary需要优化。

trace分析优化器:

SQL优化:

如果建表有唯一索引,默认会启用唯一性校验。手动关闭可加速。

order by优化:

用到的还是索引覆盖。如果查询的数据在索引内会有用。

多字段排序,如果一个升序,一个降序不会走索引。

建议使用union来替换:求并集。

思路二需要主键自增,且不能出现断层。

忽略索引:

注意和use index的区别。force是强制使用的。

应用优化:

内存管理及优化:

 

注意两者区别,Innodb还缓存数据块和索引块,myisam只缓存索引块。

Mysql锁

加了写锁,其他事务读写都得等。

InnoDB行锁:

SQL技巧:

日期函数:

Mysql日志:

Mysql复制:

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值