JAVA学习数据库阶段day05

根据老师讲解,自己对学习的整理,非本人原创知识

视图

视图:就是一张特殊的表,用来缓存查询的结果

类似在JAVA中写一个方法,可以在使用时调用

创建视图

create view 视图名 as 查询语句

使用视图

select * from 视图名

视图的好处

1.提高了SQL的复用性

2.屏蔽了真实的业务表的复杂性

3.被所有人共享

视图的坏处

1.视图一旦创建成功,就无法被优化

2.视图中存了和业务中大量重复的数据,“浪费空间”

3.视图通常用来查询,不便于更新

SQL优化

索引优化

explain select * from 表名 where 字段名 like '%条件%' # 索引失效

explain select * from 表名 where 字段名 like '条件%' #索引有效

explain select * from 表名 where 字段名 like '%条件' #索引无效

explain select * from 表名 where 字段名=数字 #失效,字段类型时varchar类型

explain select * from 表名 where 字段名='数字' #生效

插入优化

insert into 表名 values('数据1','数据2','数据3',...);

insert into 表名(字段2,字段3) values('数据2','数据3')#如果字段1为主键自增,可以在表名后标注字段,在注入数据时可以省略,但是仍需按照字段顺序添加数据

插入多次数据时可以只写一次sql减少事务

insert into 表名(字段)values('数据'),(‘数据’),('数据')

总结

1.查询语句中的*尽量替换成字段名称

2.查询条件where中,尽量用and不用or,尽量把查询条件的范围控制到最小

3.查询条件中,尽量用=不用!=,<>,尽量不用in

4.表设计时,字段类型尽量用varchar代替char,尽量用数字代替字符串

5.索引:单表中的索引最好控制在5个以内

模糊查询时,只有一种可以让索引生效:确定开始元素'abc%'

写SQL时注意字符串的标注写法

where name=123,name的索引会失效

where name='123',name的索引会生效

注意复合索引的最左特征,如果不遵循会导致复合索引失效

6.多表联查:可以使用三种方式 笛卡尔积/连接查询/子查询

尽量不要有太多表联查,阿里的开发规范规定了最多三张表一起联查

连接查询相对高效,最高效的时内连接,因为内连接只查交集

但是在工作中使用左连接的最多,也会使用子查询

三范式

三大范式(小白视角,一看就懂)_Java喵喵的博客-CSDN博客_三范式

理论

对于数据库的设计人员,必须要遵循的规范就就做范式

常见的范式有三范式:1NF,2NF,3NF

好处:可以让数据减少冗余

规则

第一范式:1NF,是指 表里的字段值不能再被分割

例如:地区不能作为第一范式的,因为可以分为省,区等

第二范式:2NF,是指遵循了1NF的基础上上,再遵循2NF

是指 表里都应该设计主键字段(主属性)

其他的非主属性,应该都围绕着主属性展开描述

总结:遵循第一范式,且表里要设置主键,其他非主键的属性,都要围绕主键连描述

第三范式:3NF,是指遵循了前两范式

是指 字段之间的依赖性是直接的,而不是还要简介的产生依赖,导致查询关闭变得复杂

例如:如果想要查询老师就直接查询老师,不能经过其他东西查询老师,要让数据产生依赖

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值