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 表名(字段名)
Java基础(七)的更多相关文章
- Java基础七-正则表达式
Java基础七-正则表达式 一.定义: 特定的符号的组合 二.作用: 用于操作字符串数据 三.优缺点 简化代码,但是阅读性差 四.引入 4.1 问题 判断一个号码是否是QQ号? 不是零开头 6-15位 ...
- java基础七 [图形用户接口](阅读Head First Java记录)
到目前为止我们接触的都是Java的命令行,但是为了让用户使用,必须有图形化界面,所以这章主要讲的是怎么使用GUI(图形用户接口) 创建一个GUI:javax.swing.* 本章讲的布局相关内容都 ...
- java基础(七)-----深入剖析Java中的装箱和拆箱
本文主要介绍Java中的自动拆箱与自动装箱的有关知识. 基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我们编程中使用最频繁的类型. Java是一种强类型 ...
- Java基础七(Eclipse工具)
今日内容介绍1.Eclipse开发工具2.超市库存管理系统 ###01Eclipse的下载安装 * A: Eclipse的下载安装 * a: 下载 * http://www.eclipse.org ...
- java基础(七) java四种访问权限
引言 Java中的访问权限理解起来不难,但完全掌握却不容易,特别是4种访问权限并不是任何时候都可以使用.下面整理一下,在什么情况下,有哪些访问权限可以允许选择. 一.访问权限简介 访问权限控制: ...
- Java基础(七)--Exception异常处理
发现错误的理想时机是程序运行之前(编译期),然后不太现实,很多异常无法被发现(特别是业务上的数据),需要在运行时解决. 错误恢复机制保证代码健壮性的方式,异常处理在程序中很常见,也是必须的,必须考虑有 ...
- Java基础(七)
字符串String类 字符串的两个问题 构造方法 字符串池 字符串的内容不可变 比较方法 练习:模拟登陆 练习:模拟登陆(限制重试次数) 替换方法(敏感词过滤) 如果希望将字符串当中指定的部分进行替换 ...
- java基础(七)之子类实例化
知识点;1.生成子类的过程2.使用super调用父类构造函数的方法 首先编写3个文件. Person.java class Person{ String name; int age; Person() ...
- java基础(七)--键盘输入
一.示例 package cnblogs; import java.util.Scanner; public class TestBase07IO { public static void main( ...
- 重学JAVA基础(七):线程的wait、notify、notifyAll、sleep
/** * 测试thread的wait notify notifyAll sleep Interrupted * @author tomsnail * @date 2015年4月20日 下午3:20: ...
随机推荐
- 【Java Web开发学习】Spring4条件化的bean
[Java Web开发学习]Spring4条件化的bean 转载:https://www.cnblogs.com/yangchongxing/p/9071960.html Spring4引入了@Con ...
- iOS 类别 类扩展 简要说明
- OpenLDAP的docker版安装
分为服务器和client的web版. ldap.sh #!/bin/bash -e docker run --name ldap-service -- docker run --name phplda ...
- AudioFormat.Encoding
https://docs.oracle.com/javase/7/docs/api/javax/sound/sampled/AudioFormat.Encoding.html
- 「专题总结」LCT入门
上次xuefeng说我的专题总结(初探插头dp)太不适合入门了,所以这次丢一些题解包以外的东西. 关键是我自己也不会...急需梳理一下思路... (让我口胡数据结构???顺便推广一下全世界最短的lct ...
- python 打飞机项目 (实战一)
第一步定义 main 函数: # -*- coding=utf-8 -*- import pygame,time from Plane import Plane from pygame.locals ...
- Java之JDK配置
目录 JDK配置 进入配置界面 配置JAVA_HOME 配置Path 配置CLASSPATH 查看是否成功 JDK配置 系统重装,由于要设置各种环境变量,怕之后还会遇到这个情况,特此记录一下. 前提: ...
- Prometheus学习系列(九)之Prometheus 存储
前言 本文来自Prometheus官网手册 和 Prometheus简介 存储 Prometheus是一个本地磁盘时间序列数据库,但也可选择与远程存储系统集成,其本地时间序列数据库以自定义格式在磁盘上 ...
- C lang: The Command line
Ax_command line h Ax_a command line describe The command line is in enviroment for DOS,to user opera ...
- leaflet 结合 Echarts4 实现统计图(附源码下载)
前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...