根据老师讲解,自己对学习的整理,非本人原创知识
视图
视图:就是一张特殊的表,用来缓存查询的结果
类似在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,是指遵循了前两范式
是指 字段之间的依赖性是直接的,而不是还要简介的产生依赖,导致查询关闭变得复杂
例如:如果想要查询老师就直接查询老师,不能经过其他东西查询老师,要让数据产生依赖