JAVA学习之-数据库设计及优化_课堂笔记
sinye56 2024-10-08 16:58 4 浏览 0 评论
1.数据库设计
(1)定义:规划数据库中数据对象以及之间关系的过程
(2)为什么进行数据库设计
节约数据占用空间大小
保证数据的4种完整性
便于程序的后期开发及维护
2.E-R模型
定义:实体关系模型图
矩形:实体
椭圆形:属性
菱形:关系
3.数据库设计的三大范式
定义:为了设计结构良好的数据库,需要遵守一些专门的规则,
称为数据库的设计范式
三大范式的设计目标:
第一范式(1NF)的目标:确保每列的原子性
第二范式(2NF)的目标:确保表中的每列,都和主键相关
第三范式(3NF)的目标:确保每列都和主键列直接相关,而不是间接相关
(例如:年龄和出生日期,二者保留不变动或不常变动的一个即可)
4.数据库设计步骤
(1)分析需求、收集信息
(2)标识对象,即数据库表
(3)标识对象的属性,即数据库表字段(列)
(4)标识对象之间的关系(主、外键关系)
5.一般优化技巧
(1)建议不用“*”代替所有列名
(2)删除所有数据用TRUNCATE代替DELETE
(3)用NOT EXISTS 代替NOT IN
(4)用EXISTS代替IN
(5)用EXISTS代替DISTINCT
例如:
--用 EXISTS 代替 distinct 优化 查询有多少不同的部门
select DISTINCT d.deptno ,d.dname from teacher t
INNER JOIN dept d ON t.deptno=d.deptno;
SELECT d.deptno ,d.dname FROM dept d
WHERE EXISTS (SELECT 'X' FROM teacher t WHERE t.deptno=d.deptno);
--exists代替in 查询 部门编号等于30的老师有几人
SELECT count(t.deptno)
FROM teacher t
WHERE t.deptno IN (SELECT d.deptno FROM dept d WHERE d.deptno = 30);
SELECT count(t.deptno)
FROM teacher t
WHERE EXISTS (SELECT 'X'
FROM dept d
WHERE d.deptno = t.deptno
AND d.deptno = 30);
6.关于驱动表
示例:
--先根据名称查询
select * from TEACHER t WHERE trim(T.TNAME)='李寻欢'
--后创建索引
create index IDX_TEACHER_NAME on TEACHER (tname);
--在查询进行对比
SELECT * FROM TEACHER T WHERE T.TNAME = '李寻欢'
解释计划窗口查看驱动表
选择驱动表有如下3个规则:
-- A\B两张表都没有索引的情况下,from 后面靠后的那个表就是驱动表
-- A\B两张表中,一张有索引,一张没索引的情况下,驱动表是没索引的那张
-- 驱动表要选择小表(查询后,得到的结果集数据量小的那张表
7.表连接优化规则
(1)用于连接的子句的列应被索引、在Where子句中应尽量利用索引,而不是避开索引;
(2)连接操作应从返回较少行上驱动;
(3)如果所连接的表A和B,A表长度远远大于B表,建议从较大的A表上驱动 ;
(4)如果Where子句中含有选择性条件,Where No=20,将最具有选择性部分放在表达式最后;
(5)如果只有一个表有索引,另一表无索引,无索引的表通常作为驱动表;
如A表的No列以被索引,而B表的No列没被索引,则应当B表作为驱动表,A表作为被驱动表;
8.索引的分类及原则
分类:唯一索引、非唯一索引、反向键索引、位图索引、组合索引、函数索引
创建索引原则:
频繁搜索的列
经常排序、分组的列
经常连接的列
指定单独的表空间
不适合建立索引原则
数据量小
仅包含几个不同值的列
数据表操作特别频繁、业务性能要求高
9.索引的注意事项
索引使用原则:
表中导入数据后再创建索引。否则每次表中插入数据时都必须更新索引
在适当的表和字段上创建索引。如果经常检索的数据少于表中的15%则需要创建索引
限制表中索引的数目。索引越多,在修改表时对索引做出修改的工作量越大
索引常见错误用法:
LIKE、函数、运算
10.表分区
表分区:把表中数据划分成若干部分,并存储在不同的位置
优点: 改善查询性能
表更容易管理
便于备份和恢复
提高数据安全性
11.数据库对象
Oracle 数据库对象又称模式对象
数据库对象是逻辑结构的集合,最基本的数据库对象是表
12.视图
用途:
限制对表中的一组行为访问
隐藏数据的复杂性
简化了用户的SQL
基表定义修改隔离
通过重命名列,从另一个角度提供了数据
DML操作的限制
只能对基表进行操作
注意权限问题
相关推荐
- Linux基础知识之修改root用户密码
-
现象:Linux修改密码出现:Authenticationtokenmanipulationerror。故障解决办法:进入单用户,执行pwconv,再执行passwdroot。...
- Linux如何修改远程访问端口
-
对于Linux服务器而言,其默认的远程访问端口为22。但是,出于安全方面的考虑,一般都会修改该端口。下面我来简答介绍一下如何修改Linux服务器默认的远程访问端口。对于默认端口而言,其相关的配置位于/...
- 如何批量更改文件的权限
-
如果你发觉一个目录结构下的大量文件权限(读、写、可执行)很乱时,可以执行以下两个命令批量修正:批量修改文件夹的权限chmod755-Rdir_name批量修改文件的权限finddir_nam...
- CentOS「linux」学习笔记10:修改文件和目录权限
-
?linux基础操作:主要介绍了修改文件和目录的权限及chown和chgrp高级用法6.chmod修改权限1:字母方式[修改文件或目录的权限]u代表所属者,g代表所属组,o代表其他组的用户,a代表所有...
- Linux下更改串口的权限
-
问题描述我在Ubuntu中使用ArduinoIDE,并且遇到串口问题。它过去一直有效,但由于可能不必要的原因,我觉得有必要将一些文件的所有权从root所有权更改为我的用户所有权。...
- Linux chown命令:修改文件和目录的所有者和所属组
-
chown命令,可以认为是"changeowner"的缩写,主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件(或目录)的所属组。当只需要修改所有者时,可使用...
- chmod修改文件夹及子目录权限的方法
-
chmod修改文件夹及子目录权限的方法打开终端进入你需要修改的目录然后执行下面这条命令chmod777*-R全部子目录及文件权限改为777查看linux文件的权限:ls-l文件名称查看li...
- Android 修改隐藏设置项权限
-
在Android系统中,修改某些隐藏设置项或权限通常涉及到系统级别的操作,尤其是针对非标准的、未在常规用户界面显示的高级选项。这些隐藏设置往往与隐私保护、安全相关的特殊功能有关,或者涉及开发者选项、权...
- 完蛋了!我不小心把Linux所有的文件权限修改了!在线等修复!
-
最近一个客户在群里说他一不小心把某台业务服务器的根目录权限给改了,本来想修改当前目录,结果执行成了根目录。...
- linux改变安全性设置-改变所属关系
-
CentOS7.3学习笔记总结(五十八)-改变安全性设置-改变所属关系在以前的文章里,我介绍过linux文件权限,感兴趣的朋友可以关注我,阅读一下这篇文章。这里我们不在做过的介绍,注重介绍改变文件或者...
- Python基础到实战一飞冲天(一)--linux基础(七)修改权限chmod
-
#07_Python基础到实战一飞冲天(一)--linux基础(七)--修改权限chmod-root-groupadd-groupdel-chgrp-username-passwd...
- linux更改用户权限为root权限方法大全
-
背景在使用linux系统时,经常会遇到需要修改用户权限为root权限。通过修改用户所属群组groupid为root,此操作只能使普通用户实现享有部分root权限,普通用户仍不能像root用户一样享有超...
- 怎么用ip命令在linux中添加路由表项?
-
在Linux中添加路由表项,可以使用ip命令的route子命令。添加路由表项的基本语法如下:sudoiprouteadd<network>via<gateway>这...
- Linux配置网络
-
1、网卡名配置相关文件回到顶部网卡名命名规则文件:/etc/udev/rules.d/70-persistent-net.rules#PCIdevice0x8086:0x100f(e1000)...
- Linux系列---网络配置文件
-
1.网卡配置文件在/etc/sysconfig/network-scripts/下:[root@oldboynetwork-scripts]#ls/etc/sysconfig/network-s...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)