首页 > 数据库 >Oracle数据库知识汇总

Oracle数据库知识汇总

时间:2024-07-01 14:59:56浏览次数:15  
标签:语句 index 事务 数据库 汇总 value 索引 Oracle where

一、数据库三大范式

  1. 第一范式:每个列都不可再拆分;
  2. 第二范式:在第一范式的基础上,非主键字段完全依赖于主键字段,而不是依赖部分主键字段;
  3. 第三范式:在第二范式的基础上,非主键字段只依赖于主键字段,不依赖其他非主键字段。

二、索引

定义:建立在表一列或多列的辅助对象,目的是加快访问表的数据。

1.索引的优点

  1. 创建唯一性索引,可以确保数据的唯一性;
  2. 大大加快数据检索速度;
  3. 加速表与表之间的连接;
  4. 在查询过程中,使用优化隐藏器,提高系统性能。

2.索引的缺点

  1. 创建和维护索引需要耗费时间,随数据量增加而增加;
  2. 索引占用物理空间;
  3. 对表的数据进行增删改时,索引需要动态维护,降低了数据的维护速度。

3.常用索引sql语句

  1. 建立索引:create index index_name on table_name([column1 [asc|desc])
  2. 重命名索引:alter index index_name rename to index_new;
  3. 合并索引:alter index index_name coalesce;
  4. 重建索引:alter index index_name rebuild;
  5. 删除索引:drop index index_name;
  6. 查看索引:select * from all_indexes where table_name='表名';

4.应该建立索引的列

  1. 经常搜索的列,可加快搜索的速度;
  2. 主键列,确保数据唯一;
  3. 经常用于连接的列,加快连接速度;
  4. 经常排序的列,索引已经排序,可节省排序时间;
  5. 经常使用在where子句的列,加速判断时间;

5.不应该建立索引的列

  1. 查询中很少使用的列;
  2. 单一值的列;
  3. blob数据类型的列;

6.索引限制

  1. 索引列使用不等于操作符<>、!=;
  2. 使用 is null 或is not null;
  3. where子句中使用函数;
  4. 比较不匹配的数据类型(不匹配的数据类型之间比较会让Oracle自动限制索引的使用);

7.索引分类

        B-树索引

        HASH索引

        分区索引

三、储存过程

四、游标

五、视图

六、事务和锁

1.事务

定义:是用户定义的一个操作序列

特点:

  1. 原子性,要么不发生,要么全发生;
  2. 一致性,数据库是从一个一致性状态变成另一个一致性状态;
  3. 隔离性,同时发生的多个事务互不干扰
  4. 持久性,事务一旦提交,对数据库造成的影响是永久的;

结论:事务支持多个保存点,可以在返回最近的保存点后另外再返回其他的保存点,但一旦

     保存点返回,保存立即回收。事务提交之后,保存点失效。

隔离级别:

脏读、幻读和不可重复读:

  1. 脏读:一个事务读取到另外一个事务未提交的动作(解决办法:如果在第一个事务提交前,任何其他事务不可读取其修改过的值,则可以避免该问题。)
  2. 不可重复读:在同一事务中多次查询,由于其他事务所做的修改和删除,导致每次返回不同的结果集,此时发生非重复读(解决办法:如果只有在修改事务完全提交之后才可以读取数据,则可以避免该问题。)
  3. 幻读:在同一事务中多次查询,由于其他事务所做的插入,导致每次返回不同的结果集,此时发生幻读(解决办法:如果在操作事务完成数据处理之前,任何其他事务都不可以添加新数据,则可避免该问题。)

2.锁

分类:排它锁(X锁),共享锁(S锁)

排他锁:写锁.这种模式的锁防止资源的共享,用做数据的修改。

共享锁:读锁.该模式锁下的数据只能被读取,不能被修改。

死锁:当两个用户希望持有对方的资源时就会发生死锁.(即两个用户互相等待对方释放资源时,oracle认定为产生了死锁,在这种情况下,将以牺牲一个用户作为代价,另一个用户继续执行,牺牲的用户的事务将回滚。)

七、常用函数

1.字符串函数

  • NVL(string1, replace_with):如果string1为NULL,则返回replace_with的值,否则返回string1的值。
  • INITCAP, LOWER, UPPERINITCAP将字符串第一个字母变为大写,LOWER将字符串所有字母小写,UPPER将字符串所有字母大写。
  • SUBSTR(string, start_position, length):从string中截取从start_position开始的length个字符。
  • INSTR(X, STR[, START[, N]]):从X中查找STR的位置,可选参数指定开始位置或查找次数。
  • LENGTH(X):返回X的长度。
  • LOWER(X):将X转换为小写。
  • UPPER(X):将X转换为大写。
  • LTRIM(X[, TRIM_STR])RTRIM(X[, TRIM_STR])TRIM([TRIM_STR FROM]X):分别用于去除字符串左边、右边或两边的特定字符,缺省时去除空格。
  • REPLACE(X, old, new):在X中查找old字符串并替换为new字符串。

2.数学函数

  • ROUND(number, decimals):将数字四舍五入到指定的小数位数。
  • ABS(value)CEIL(value)FLOOR(value)SIGN(value)POWER(value, exponent)SQRT(value)TRUNC(value, precision):分别用于求绝对值、向上取整、向下取整、判断正负、求幂、求平方根、截断数字。

3.转换函数

  • TO_NUMBER(string):将字符串转换为数字。
  • TO_CHAR(value):将数值转换为字符串。
  • TO_DATE(value):将字符串转换为日期类型

4.其他函数

  • DECODE(field_or_expression, value1, result1 [, value2, result2 ...] [, default]):类似于其他编程语言中的switch语句,根据字段或表达式的值返回不同的结果。
  • SIGN():根据数值是正数、负数还是零返回相应的值。
  • IPAD():在ID前追加值,总长度为指定长度。

八、数据库优化

优化流程:

分析数据库压力来源 ——> 调整业务合理性——> 调整数据设计 ——> 调整流程设计 ——> 添加索引 ——> 调整sql语句 ——> 调整物理结构(分库,分表) ——> 调整服务器内存分配 ——> 调整IO ——> 调整内存竞争 ——> 调整操作系统参数

优化原则

(1)目标:减少服务器资源消耗(主要是磁盘IO);

(2)设计方面:合适的索引,索引的双重效应,列的选择性;

(3)编码方面:

利用索引,避免大表FULL TABLE SCAN;

合理使用临时表;

避免写过于复杂的sql,不一定非要一个sql解决问题;

在不影响业务的前提下减小事务的粒度;

1.分析数据库压力来源

2.调整业务合理性

3.调整数据设计

4.添加索引

5.优化sql语句

流程

(1)、定位有问题的语句;

(2)、检查执行计划;

(3)、 检查执行过程中优化器的统计信息;

(4)、分析相关表的记录数、索引情况;

(5)、 改写SQL语句、使用HINT、调整索引、表分析;

(6)、有些SQL语句不具备优化的可能,需要优化处理方式;

细节

(1)查询尽量用确定的列名,少用*号。

select * from bdc_zc_qs;

性能优化后的语句: select bzm_qs,ywh,... from bdc_zc_qs;

(2)尽量少嵌套子查询,这种查询会消耗大量的CPU资源

(3)比较多or运算的查询能使用union all 替换 or运算,建议分成多个查询,用union all联结起来;

(4)多表查询选择最有效率的表名顺序;oracle解析器对表解析从右到左,所以记录少的表放在右边;

(5) 尽量多用commit语句提交事务,可以及时释放资源、解锁、释放日志空间、减少管理花费;减小事务粒度;

(6)尽量避免使用dblink访问数据库,使用dblink会产生数据上的网络交互,极大影响性能;

(7)union all 替换union,union 原理是把两个集合union all起来在进行排序去重复;

(8)尽量不要使用distint,distinct会产生排序;

(9)视图尽量不要使用order by;

(10)避免在索引列上使用函数,计算等;

(11)避免在索引列上使用not条件;

(12)注意查询列字段类型,避免索引列自动转换;

例如:select * from bdc_zc_qs qs where qs.ywh=666,这种情况oracle会转换成to_number(qs.ywh)=666

(13) 用not exists 替代not in;

(14)符号运算使用顺序:=、>=、>、<>;‘’

(15)使用where条件时候把最优的条件放最后,oracle采用自下而上的顺序解析WHERE子句,根据这个原理, 当在where 子句中有多个表联接时,where 子句中排在最后的表应当是返回行数可能最少的表,有过滤条件的子句应放在where 子句中的最后

sql语句执行过程

sql语句处理过程

推荐文章:ORACLE 知识汇总_oracle知识点总结-CSDN博客

标签:语句,index,事务,数据库,汇总,value,索引,Oracle,where
From: https://blog.csdn.net/qi923432163/article/details/116294807

相关文章

  • 磐维数据库安装提示max_process_memory must greater than问题
    很多人在个人虚拟机部署磐维测试环境时会碰上一个提示内存太少的报错,多数是因为虚拟机给的内存太少了。遇到报错也可以不用调整虚拟机内存,可以调整参数解决。报错示例如下:BACKEND]FATAL:thevaluesofmemoryoutoflimit,thedatabasefailedtobestarted,max_process_mem......
  • 磐维数据库查询结果按列展示
    磐维数据库中如何实现查询结果按列展示?类似与MySQL数据库的\G效果,可以使用\x命令,以扩展方式显示查询结果。示例如下:postgres=#\xExpandeddisplayison.postgres=#select*frompg_user;-[RECORD1]----+-------------usename|dtpusesysid|20720usecreatedb|0......
  • mysql数据库简介
    一、数据库介绍1.数据库基本概念数据(Data)描述事物的符号记录包括数字,文字、图形、图像、声音、档案记录等以“记录”形式按统一的格式进行存储表将不同的记录组织在一起用来存储具体数据数据库表的集合,是存储数据的仓库以一定的组织方式存储的相互有关的数据集合数据......
  • 知识不成体系?这篇Mysql数据库将成为你的解忧杂货店!(子查询)
     欢迎来到@一夜看尽长安花博客,您的点赞和收藏是我持续发文的动力对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何想要讨论的问题可联系我:[email protected]。发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。   专栏:java全栈C&C++PythonAIP......
  • MES-ERP系统专有名词汇总
    ECO:(EngineerChangeOrder)工程改动单。当发现工程资料有问题时,工程部发出的变更指令。ECR:(EngineerChangeRequest)工程变更需求。当发现工程资料有问题时生产部门等向工程发出的资料变更请求。当工程部同意后,工程部会发出ECO同意变更。PCN:(ProcessChangeNotific......
  • MyBatisPlus全攻略:轻松掌握高级数据库操作
    文章目录基础操作1.基础操作概念2.基础操作示例分页查询1.分页查询概念2.分页查询示例3.分页查询SQL代码条件构造器1.条件构造器概念2.条件构造器示例3.条件构造器SQL代码自动填充1.自动填充概念2.自动填充示例3.自动填充SQL代码代码生成器1.代码生成器......
  • 1974Springboot医院远程诊断管理系统idea开发mysql数据库web结构java编程计算机网页源
    一、源码特点 springboot医院远程诊断管理系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSPjava编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。springboot医院远程诊断系统......
  • 探秘数据库中的并行计算技术应用
    本文分享自华为云社区《【GaussTech技术专栏】数据库中并行计算技术应用探秘》,作者:GaussDB数据库。并行计算是提高系统性能的重要手段之一。该技术是通过利用多台服务器、多个处理器、处理器中的多核以及SIMD指令集等技术,实现任务的并行化处理,从而加快任务处理的速度。同时,在多个......
  • Oracle中的GROUP BY 子句
    数据准备--第一步:建表:--删除表(包括数据结构)droptableTMP_EMP;droptableTMP_DEPT;--删除表(不包括数据结构)truncatetableTMP_EMP;truncatetableTMP_DEPT;createtableTMP_DEPT(deptnonumber(10)primarykey,dnamevarchar2(30),loc......
  • Oracle PL / SQL 函数
    FUNCTION是返回值的PL/SQL块或方法,因此它可以在赋值的右侧使用。这里是一个例子:n_value:=to_number('123.45');由于FUNCTION返回一个值,因此也可以在SQL语句中使用它,如下例所示:selectto_number('1')fromdual;创建函数让我们创建一个无错的to_number()函数,而不......