Java基础(七)

左连接,右连接,内连接,全连接的区别

左连接:返回左表所有行,右表没有匹配行则返回null
右连接:返回右表所有行,左表没有匹配行则返回null
内连接:返回左右表共有行
全连接:返回左右表所有行,无互相匹配得则返回null

MySQL中in和exists区别

1、exists对外表用loop逐条查询,每次查询都会查看exists的条件语句,有记录返回true反之false;
2、in相当于多个or条件的叠加。
外层查询表小于子查询表,则用exists,外层查询表大于子查询表,则用in,如果外层和子查询表差不多,则爱用哪个用哪个。
not in不会使用索引,not exists效率更高

数据库查询缓慢的常见原因以及优化方法

1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)
根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。
注意填充因子要适当(最好是使用默认值0),应该尽量使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一索引如性别字段
2、I/O吞吐量小,形成了瓶颈效应
把数据、日志、索引放到不同的I/O设备上,数据量(尺寸)越大,提高I/O越重要
3、没有创建计算列导致查询不优化
mysql> create table t(id int auto_increment not null,c1 int,c2 int,c3 int as (c1+c2),primary key(id));
4、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)
mysql->limit分页查询 oracle->rownum
5、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)
解除锁表释放锁
6、返回了不必要的行和列、
需要什么查什么
7、查询语句不好,没有优化
1)外层查询表小于子查询表,则用exists,外层查询表大于子查询表,则用in,如果外层和子查询表差不多,则爱用哪个用哪个。
2)>和>=和<和<=操作符:而A>=3优于A>2
3)Like操作符:LIKE ‘张%’则会引用范围索引,LIKE ‘%张%’ 这种查询不会引用索引
4)应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描
5)避免SELECT *
6)应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描,将可以过滤掉大量数据的条件放前边
8、内存不足
9、网络速度慢
10、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。

数据库三大范式

1、第一范式(1NF):
1)数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性;
例如:地址信息,应该拆分为省、市、详细地址
2)两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。
例如:物品1、物品2,应该合并为物品
2、第二范式(2NF):
满足1NF后,要求表中的所有列,每一行的数据只能与其中一列相关,即一行数据只做一件事,只要数据列中出现数据重复,就要把表拆分开来。
例如:一个联系人同时下多个订单,就会出现一个联系人对应多条订单数据,这样子联系人都是重复的,就会造成数据冗余,应该拆分成订单表和联系人表
3、第三范式(3NF):
满足2NF后,要求表中的每一列都要与主键直接相关,而不是间接相关(表中的每一列只能依赖于主键),数据不能存在传递关系。
例如:Student表,学号--> 所在院校 --> (院校地址,院校电话);应该拆开(学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话)
注意:
1、第二范式与第三范式的本质区别,在于有没有分出两张表。
2、必须先满足第一范式才能满足第二范式,必须同时满足第一第二范式才能满足第三范式。

数据库五大约束

数据库中的五大约束包括:
1.主键约束(Primay Key Coustraint) 唯一性,非空性;
2.唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个;
3.默认约束 (Default Counstraint) 该数据的默认值;
4.外键约束 (Foreign Key Counstraint) 需要建立两表间的关系;
5.非空约束(Not Null Counstraint):设置非空约束,该字段不能为空。
五大约束的语法示例:
1. 添加主键约束
Alter table 表名 add Constraint 主键名 primary key(字段)
Alter table tb_name modify id int auto_increment primary key
2.添加唯一约束
Alter table 表名 add Constraint 约束名 unique(字段)
3.添加默认约束
Alter table 表名 add Constraint 约束名 default(默认内容) for 字段名
4.添加检查约束
Alter table 表名 add Constraint 约束名 check (字段表达)
5.添加外键约束
Alter table 表名 add Constraint 约束名 foreign key(字段) references 表名(字段名)

posted @ 2019-12-17 17:09  秋裤队长  阅读(213)  评论(0编辑  收藏  举报