我的编程空间,编程开发者的网络收藏夹
学习永远不晚

oracle数据库应用开发经验

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

oracle数据库应用开发经验

oracle数据库应用开发经验

 

l  日志表应该以时间做分区,方便清理

一般应用都会有一些表用来记录用户操作日志,数据变更记录,交易流水等日志型的库表。这些表最好按时间字段做分区,这样在迁移或者清理历史记录时会比较方便,借助oracle的分区交换清理特性,效率比delete高很多。

 

 

l  频繁访问的sequece应该增加cache

Oracle在创建序列可以指定cache参数,如果打开这个参数,Oracle就可以预先生成一些sequece,这样应用获取sequece相互争用数据块的概率就会减少,加快获取sequece速度。

 

 

l  队列表也应该做分区,减少出现高水位问题

有时我们会使用数据库表存放待处理的信息,处理完后把记录删除,像是消息队列一样。这种我们称之为队列表。这种表经常会出现高水位的问题,即某一瞬间突然涌入了很多数据,等系统把表里面记录处理完,删除后整个表访问速度还是很慢(因为高水位被上移后没恢复)。这时如果库表有分区,则不容易出现这种问题。

 

l  减少外键使用

在设计库表时我们一般要使用外键以辅助表示不同库表数据的关联,但在实际部署时最好不要把外键加上。一个原因是外键会影响数据插入删除效率,更重要的原因是加了外键的库表在数据清理,修复时会带来许多麻烦。

 

l  减少存储过程

 

有些程序员喜欢使用存储过程封装业务逻辑,虽然这样处理数据速度快,但把压力都留给了数据库服务器。而数据库服务器资源往往是比较有限的,而且比较难扩展。而应用服务器资源相对会丰富一些,也好扩展。所以建议尽量少使用存储过程,即使用也不要放太多业务逻辑。

 

l  使用绑定变量

尽可能使用绑定变量代替拼sql,这样一是减少sql注入风险,另外一个是让数据库可以复用执行计划(sql文本相同的才有可能复用),减少数据库生成执行计划的消耗。

 

l  使用并行

Oracle提供并行技术,可以把一个sql涉及的数据集拆分成多份,交由不同进程处理,以加快数据处理速度。对于OLAP系统,可以考虑使用此技巧提高sql运行速度。

 

l  使用hint避免数据量变化过大的表

有时候我们的应用会出现一些数据变化比较大的表,有时表里面只有几十条数据,有时可能有几万,几十万条。对于这种表的访问最好使用hint强制数据库在任何情况都使用索引访问,因为在数据量小时数据库生成的执行计划可能是使用全表扫描,到后面数据发生变化时由于sql没有变,执行计划也没变,这时使用全表扫描效率就会很低。

 

l  使用tt 共享内存等

当一个会话需要访问一个数据块,而这个数据块正在被另一个用户从磁盘读取到内存中或者这个数据块正在被另一个会话修改时,当前的会话就需要等待,就会产生一个buffer busy waits等待,也伴随着Latch争用。如果太多的会话去访问相同的数据块导致长时间的buffer busy waits等待,通常表现形式为CPU使用率很高,但吞吐量很低。造成热快的原因可能是数据库设置导致或者重复执行的SQL 频繁访问一些相同的数据块导致。

 

l  两个大表关联查询尽量走hash join

虽然oracle提供了很多种表关联算法,但是经过实验,对两个数据量大的表连接还是使用hash连接效率最高。

 

l  尽量少用业务要素作为主键

不使用业务要素作为主键,可以为系统提供很多便利性。一是避免需求变更,原来。二是

 

l  合理使用纵表和横表设计

所谓横表就是指把一个实体的所有特性存储在一行记录,形成(ID,属性1,属性2,。。。,属性N)的库表。

而纵表则是把实体属性分开多条记录存储,设计成(ID,属性名称,属性值)这样的库表。

 

下面是一个横表和纵表的例子:

 

使用横表好处:

1 比较直观,查询比较方便

2 属性值可以根据属性内容设计,例如年龄用number类型存储,职业用varchar2存储

 

使用纵表好处:

1 避免单表字段不停扩展,oracle是行存储数据库,记录字段越多,记录扫描时消耗的IO就会更多

2 增加属性比较方便

 

建议:对于频繁使用的属性放横表,对于不频繁使用的属性(例如住址),或者只有少部分记录有的属性(例如博客)放纵表。

 

l  频繁使用的小表可以考虑设置cache参数

设置了cache后,oracle会尽量让这个表的数据保持在内存,提高访问速度。我碰到过把操作员和菜单信息表加了cache参数,大幅提高登录速度的情况。

 

l  物化视图

普通视图只是用于简化复杂查询,对于效率提升不大。Oracle提供了一种叫物化视图的特殊对象,可以把视图查询的结果集存起来,并且支持在基础数据变化时自动刷新。不过物化视图bug多,使用需要谨慎。

 

l  使用rac集群的数据库,最好分业务使用不同优先节点

由于oracle访问数据块时要求先把数据装载到内存,如果有某个数据块频繁被不同实例节点访问,会导致rac集群频繁地把数据从一个节点机器传输到另一个节点,这样会很消耗时间。所以建议不同业务优先访问不同rac节点,这样可以减少数据争抢的概率。

 

l  善用函数索引解决状态字段查询,少用位图索引

使用。位图索引容易造成数据块争用,建议在OLTP系统少用。

 

l  悲观锁和乐观锁

悲观锁思想认为,数据被并发修改的几率比较大,需要在修改之前借助于数据库锁机制,先对数据进行加锁。乐观锁思想认为,数据一般是不会造成冲突的。所以在一般先将数据查出来但不加锁,在修改回数据库时检查数据有没有发生过变化,如果有则认为更新失败。业务场景允许失败重试的情况,建议多考虑使用悲观锁,减少锁资源对数据库的消耗。

 

l  一致读

Oracle的数据块被修改之前会把数据块备份到undo表空间,这样可以保证sql查询过程中,数据被修改不会影响查询结果。而且还可以使用“闪回查询”的技术,指定查询库表某个时间点的数据。

 

l  使用with as改写复杂的关联查询

这样好处一是简化sql逻辑,二是有必要时还可以使用hint:materialize先把with as的内容实体化,减少重复查询。

 

l  索引要合理(基数过小的字段不适合建索引)

有些程序员在性别列上面都建了索引,以为查询时至少可以省一半时间,其实是错的。因为对于这种选择性不高的查询,先使用索引查询再回表查会导致很多随机读写,速度反而不如直接全表扫描快。

 

 

l  大量数据迁移时加快入库速度的方法:

 

commit nowait

append

alter table nologging

删除索引

使用交换分区

 

l  最好对数据库api进行封装,以便在日志里面输出使用的sql

系统做复杂后,新手想完全了解系统业务很困难。如果可以设置在日志里面输出访问数据库使用的sql,可以更方便我们进行系统运维。

 

 

更多数据库开发经验见:

https://www.cnblogs.com/kingstarer/p/9613626.html 《oracle数据库应用性能优化经验(培训讲义)》

https://www.cnblogs.com/kingstarer/p/11968247.html 《Oracle Proc编程性能优化经验》

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

oracle数据库应用开发经验

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

oracle数据库应用开发经验

l  日志表应该以时间做分区,方便清理一般应用都会有一些表用来记录用户操作日志,数据变更记录,交易流水等日志型的库表。这些表最好按时间字段做分区,这样在迁移或者清理历史记录时会比较方便,借助oracle的分区交换清理特性,效率比delete高很多。  l  频
oracle数据库应用开发经验
2021-04-05

C++开发经验分享:C++数据库编程的实践经验

C++开发经验分享:C++数据库编程的实践经验导言:C++是一种功能强大、灵活性高的编程语言,因此被广泛用于开发各种应用程序。在开发过程中,数据库的使用可以提供数据的存储和管理,对于大多数应用程序来说是至关重要的。本文将分享一些基于C++的
C++开发经验分享:C++数据库编程的实践经验
2023-11-22

C++开发经验分享:C++大数据编程的实践经验

在互联网时代,大数据成为了一种新的资源,伴随着大数据分析技术的不断提升,大数据程序设计需求也愈发迫切。而C++作为一种广泛应用的编程语言,其在大数据编程方面的独特优势也日益凸显。下面将分享我在C++大数据编程方面的实践经验。一、选择合适的数
C++开发经验分享:C++大数据编程的实践经验
2023-11-22

Go语言开发大数据处理应用的实践经验分享

Go语言是一门开源的编程语言,由Google开发并发布,以其高效性能、简洁易用的特性而著称。近年来,随着大数据技术的快速发展,越来越多的企业开始采用Go语言来开发和处理大数据应用。本文以实践经验为基础,分享一些在使用Go语言开发大数据处理应
Go语言开发大数据处理应用的实践经验分享
2023-11-20

通过MySQL开发实现数据加工与数据仓库的项目经验分享

在当今数字化时代,数据已被普遍认为是企业决策的基础与资本。但是,处理大量数据并将其转化为可靠的决策支持信息的过程并不容易。这时,数据加工和数据仓库开始发挥重要作用。本文将分享一个通过MySQL开发实现数据加工和数据仓库的项目经验。一、项目背
通过MySQL开发实现数据加工与数据仓库的项目经验分享
2023-11-03

云开发-web应用中使用数据库

如何在 web 应用中使用数据库随着云时代的到来,云开发有着独特的优势相对于传统开发,从数据库而言,cloudbase 提供的云数据库真的很方便,本文就以一个简单的 todolist 小例子来讲解一下如何在 web 应用中使用云开发数据库构建简单的界面下面的这
云开发-web应用中使用数据库
2016-12-11

触发器与数据库性能调优的实战经验

触发器是数据库中用于自动执行特定操作的工具,当数据库中的数据发生变化时,触发器会自动执行预定义的操作。在数据库性能调优中,触发器可以发挥重要作用,但同时也需要注意其性能影响。以下是关于触发器与数据库性能调优的实战经验:触发器在数据库性能调
触发器与数据库性能调优的实战经验
2024-09-26

MySQL整理在数据库开发中的应用

MySQL是一种广泛使用的关系型数据库管理系统,其灵活性和高效性使之在数据库开发中扮演着重要角色。本文将介绍MySQL在数据库开发中的应用,并提供一些具体的代码示例。一、数据库连接在数据库开发中,首先需要建立与MySQL数据库的连接。以
MySQL整理在数据库开发中的应用
2024-03-02

MySQL开发:数据备份与恢复项目经验分享

MySQL是目前最为流行的关系型数据库管理系统之一,它广泛应用于互联网、金融、物流等各个领域,不仅具有高可靠性和高稳定性,而且还有较好的数据存储和管理能力。在日常的开发工作中,数据备份与恢复是必不可少的一部分。以下是本人在实际项目开发中的一
MySQL开发:数据备份与恢复项目经验分享
2023-11-03

运用MySQL开发的高性能数据存储项目经验解析

随着互联网时代的到来,越来越多的应用程序需要存储大量的数据。而MySQL作为一种高性能的关系型数据库,被广泛应用于各种应用场景中,例如电子商务、金融、社交媒体等。本文将分享一个基于MySQL的高性能数据存储项目的经验和技巧。数据库设计在数据
运用MySQL开发的高性能数据存储项目经验解析
2023-11-03

利用MySQL开发实现数据清洗与ETL的项目经验探讨

利用MySQL开发实现数据清洗与ETL的项目经验探讨一、引言在当今大数据时代,数据清洗与ETL(Extract, Transform, Load)是数据处理中不可或缺的环节。数据清洗是指对原始数据进行清洗、修复和转换,以提高数据质量和准确性
利用MySQL开发实现数据清洗与ETL的项目经验探讨
2023-11-03

利用MySQL开发实现实时数据同步的项目经验探讨

利用MySQL开发实现实时数据同步的项目经验探讨引言随着互联网的迅速发展,数据的实时同步成为了各个系统之间的重要需求。MySQL作为一种常用的数据库管理系统,在实现实时数据同步方面具有广泛的应用。本文将探讨在开发过程中,利用MySQL实现实
利用MySQL开发实现实时数据同步的项目经验探讨
2023-11-03

oracle数据库是哪个公司开发的

oracle数据库是由甲骨文公司开发的,该数据库以其高性能、可扩展性、可靠性、安全性、兼容性等特性闻名,广泛应用于银行、医疗、零售等行业,是全球最受欢迎的企业数据库之一。Oracle 数据库:开发公司Oracle 数据库是由 甲骨文公司
oracle数据库是哪个公司开发的
2024-04-19

数据库开发应知应会之笛卡尔积

笛卡尔积是指两个集合之间所有可能的组合,它是关系数据库中一种常用的操作方式。在关系数据库中,如果有两个表A和B,它们之间没有任何关联条件,那么可以使用笛卡尔积操作将它们进行组合。具体操作步骤如下:1. 将表A和表B分别进行编号,编号后的表分
2023-09-23

利用MySQL开发实现数据同步与复制的项目经验解析

MySQL是目前世界上最流行的关系型数据库之一,广泛应用于各种类型的应用程序中。随着数据量增长和应用程序数量的增加,数据同步和复制的需求也越来越明显。在许多企业和组织中,数据库有时需要在不同地点和系统之间同步,以实现数据一致性。因此,利用M
利用MySQL开发实现数据同步与复制的项目经验解析
2023-11-02

利用MySQL开发实现数据缓存与加速的项目经验探讨

随着互联网的快速发展,大量的数据被不断生成和存储。对于开发者来说,如何高效地处理和管理这些数据成为一个非常重要的挑战。在这个过程中,数据缓存和加速成为了一个关键的技术。MySQL作为一个常见的关系型数据库管理系统,具有良好的性能和稳定性,被
利用MySQL开发实现数据缓存与加速的项目经验探讨
2023-11-02

利用MySQL开发实现大规模数据处理的项目经验探讨

随着互联网的迅猛发展,数据量呈现几何倍数增长,这为数据库的管理和维护带来了极大的挑战。MySQL作为一款优秀的关系型数据库管理系统,随着其功能的不断完善和扩展,被越来越多的企业所接受和采用。本文将从项目实践的角度,分享在大规模数据处理领域利
利用MySQL开发实现大规模数据处理的项目经验探讨
2023-11-03

MySQL数据库实验实现简单数据库应用系统设计

目录一、实验目的二、实验要求三、实现内容及步骤1、学生表:student2、寝室表:dormitory3、管理员表:admin四、编程客栈实验总结观前提示:本篇内容为mysql数据库实验,代码内容经测试过,可能一小部分有所疏漏,也有会不符合
2022-06-20

编程热搜

目录