热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

学习笔记_oracle——SQL优化

数据库设计设计的原则1、熟悉需求2、符合开发规范命名规范明确实体与数据表的关系不能即没有主键也没有外键3、审核数据库设计4、基本表的特征1、原子

数据库设计
设计的原则
1、熟悉需求
2、符合开发规范
命名规范
明确实体与数据表的关系
不能即没有主键也没有外键
3、审核数据库设计
4、基本表的特征
1、原子性:字段不能再分解
2、原始性:是对原始数据的记录,不是拼
接出来的信息
3、演绎行:有基本表和关系表中的

数据,可以派生出任何想要的数据
4、稳定性:相对稳定,长期保存
5、必须满足一二范式,尽量满足第三范式
第一范式:对属性的原子性约束,不可再分
第二范式:记录的唯一性约束,即必须有主键
第三范式:对字段冗余的约束,一个表中的字
段不能包含其他表的非主键字段
6、简洁地E-R图
7、符合完整性约束
设计的模型
关系模型ER
强调关系


对象模型OR
强调的是实体的个体
设计的技巧
1、表越少越好,表中的组合主键的字段越少越好、字段越少越好
2、检查变化字段
3、避免使用数据库保留字
4、采用删除标记字段代替删除
5、避免使用触发器
6、发现在输入时重复数据,则需要创建新的表核心的关系
7、使用数据库设计工具
8、创建ER图表和数据字典
9、添加字段修改记录时间、修改人、修改后的版本
10、地址和电话采用多个字段
SQL优化

劣质SQL 对系统产生不好的影响的SQL
1、运行时间超长
2、引发严重的等待时间
3、不能满足压力测试
4、消耗大量的系统资源
索引
使用索引可以快速访问数据库表的特点信息
问题
1、占用表空间
2、影响DML性能
使用的条件
1、一个字段中包含大量的值
2、一个字段中包含多个空值
3、多个字段经常出现在where中
4、表非常大并且查询返回的数据量低于总数据的20%
索引的创建
CREATE INDEX 索引名 ON 表名(列名) TABLESPACE 表空间名
索引类型
列值唯一性
唯一索引
非唯一索引
索引列个数
单列索引
复合索引,第一个列为主导列
使用情况
当SQL语句时WHERE字句用到复合索引的主导列
当某几个列在SQL语句的WHERE字句通常用and连在一起使用
当SQL常常查询几个同样的列值时
索引列物理组织方式
B树索引 适用于列中数据较多的情况
反向键索引 用于大的集群系统,多用户操作统一数据块
CREATE INDEX 索引名 ON 表名(列名) REVERSE TABLESPACE 表空间名
基于函数的索引
基于一个或多个列上的函数或表达式创建的索引
用于一个表中的字段经常被函数所调用的情况
CREATE INDEX 索引名 ON 表名(函数(列名)) TABLESPACE 表空间名
位图索引 处理数据的聚合关系,用于重复数据较多的情况
CREATE BITMAP INDEX 索引名 ON 表名(表名(列名)) TABLESPACE 表空间名
表分区
应用场景
为了提高数据的可用性,档表内容或者结构非常大的时候
优点
1、提高数据可用性
2、减少管理负担
3、改善语句性能(减少并发)
分区方式
区间分区 根据一个列值得范围划分
RERTITION BY RANGE(列名) (
PARTITION 分区表名 VALUES LESS THEN 
(值) TABLESPACE 表空间
)
LESS THEN
表示小于
VALUES LESS THEN (maxvalue)表示其他 
//============实例==================================
CREATE TABLE 表名 (
dt_draw date not null
)
RERTITION BY RANGE(dt_draw) (
PARTITION 分区表名 VALUES LESS THEN 
(to_date(‘31/12/2008‘,‘dd/mm/yyyy‘)) TABLESPACE 表空间
)
散列分区 对分区间应用一个散列函数,依次确定
应放在N个分区的哪一个分区
分区表的树木间以为2的N次方
RERTITION BY HASH(列名) (
PARTITION 分区表名 TABLESPACE 表空间
)
//============实例==================================
CREATE TABLE 表名 (
dt_draw date not null
)
RERTITION BY RANGE(dt_draw) (
PARTITION 分区表名1 TABLESPACE 表空间1,
PARTITION 分区表名2 TABLESPACE 表空间2,
PARTITION 分区表名3 TABLESPACE 表空间3
)
列表分区 将数据按照列的值分区
RERTITION BY LIST(列名) (
PARTITION 分区表名 values (指定值1,指定值2) TABLESPACE 表空间
)
//============实例==================================
CREATE TABLE 表名 (
dt_draw date not null
)
RERTITION BY LIST(dt_draw) (
PARTITION 分区表名 values (指定值1,指定值2),
PARTITION 分区表名 values (指定值3,指定值4),
PARTITION 分区表名 values (指定值5,指定值6)
)
tablespace 表空间
组合分区 之前分区方式的组合
区间散列组合
PARTITION BY RANGE(列1) SUBPARTITION BY HASH (列2) (
PARTITION  VALUES LESS THAN (值) TABLESPACE 表空间 ,
)
区间列表组合
PARTITION BY RANGE(列1) SUBPARTITION BY LIST (列2) (
PARTITION  VALUES LESS THAN (值) TABLESPACE 表空间 (
SUBPARTITION 子分区名 VALUES (指定值1,指定值2) TABLESPACE 表空间
)
)
维护方式
增加分区
ALTER TABLE 表名 ADD PARTITION 分区表名 VALUES LESS THAN (值)
注意,不能包含小于最大分区分区条件的分区
删除分区
ALTER TABLE 表名 DROP PARTITION 分区表名
截断分区 删除分区中的数据
ALTER TABLE 表名 TRUNCATE PARTITION 分区表名
合并分区
ALTER TABLE 表名 MERGE PARTITIONS 要合并的分区 INTO PARTITION 合并到的分区
注意,高接线不能合并到低接线
分区维护

SQL语句的优化
1、选择合适的Oracle优化器
CBO 基于成本优化的优化器
优化模式
Rule 基于规则
Choose
默认,有统计信息CBO,否则,RBO
First Row
以最快的速度返回前几行
All Rows
以最快的速度返回所有行
2、选择恰当的查询方式
方式
全表扫描
ROWID扫描
单行数据
索引扫描 CBO下有效,索引中直接得到的数据
快速索引扫描
3、善于利用共享SQL语句
存放在SGA中,系统全局中














学习笔记_oracle——SQL优化,布布扣,bubuko.com


推荐阅读
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
author-avatar
浅小念豆科k
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有