oracle调优 浅析关联设计

浅析关联设计

【范式】

比較理想的情况下,数据库中的不论什么一个表都会相应到现实生活中的一个对象,如球员是一个对象,球队是一个对象,赛程是一个对象,比赛结果又是一个对象等等,则就是范式。

【关联设计】

对于关联设计能够理解成表和表之间要有关联关系,在对表查询时常常使用关联查询。

补充:关系数据库的来源:对一个事务操作要从多个表中读。

如2014巴西世界杯这个表空间中要有球员表、赛程表、比赛结果表,比赛结果表要关联比赛的队伍名字、球员的名字最后关联一个比赛的结果,这就是一个简单的关联关系。至于为何要设计成范式,也非常好理解,这是为了不冗余存储数据,同一场比赛的结果就不用反复的存储了,如巴西对德国0:0和德国队巴西也为0:0(由于是相同的两支队伍,结果必定是一样的),这样就能够仅仅存在一行数据了,结果也就是保持了数据的独立性。

【不良好的范式、关联设计举例】

假设不良好的范式、关联设计会引发关联的成本的问题,举个样例,假设两张表的成本都非常大,来做等值连接和不等值连接时将会有非常大的成本问题。如从世界杯的进球球员中去关联到该名球员在俱乐部中一个赛季的表现情况时,如进球数、犯规数、抢断数等等一些列数据时,而这个数据是存在于一个较大的表中的,对于这两张表的关联成本将会非常大。由于世界杯中进球球员的一行记录有可能相应赛季表中的非常多行数据,而每个球员都是这样,第一个表中的一行数据相应于第二个表中的非常多行数据,这样的交叉的链接过程中,成本是相当高的。这也就引出了,目标比較流行的技术趋势,反范式。

【反范式】

反范式,打破旧有的良好设计,而有益使用存在冗余的数据。

举个样例,例如以下图

表1:


FIFA球员ID


球员名


国籍


2014世界杯进球


......


10982


小罗


葡萄牙


6


......


23781


比利亚


西班牙


5


......


12312


穆勒


德国


4


......


......万条

表2


FIFA球员ID


10982


23781


12312


......


地区


欧洲


欧洲


欧洲


......


俱乐部


皇家马德里


马德里竞技


拜仁慕尼黑


......


2014赛季进球


32


28


6


......


......万条

如上,表1是世界杯球员统计数据,表2为球员在俱乐部中的表现情况。为了避免球员重名情况,表2使用了ID号作为标识。如今想要查看世界杯表现优异有进球的小罗在俱乐部的表现情况,即要关联世界杯有进球的球员在俱乐部中的表现情况时,要通过第一张表进行关联,先要知道小罗的ID号,再查到相应的俱乐部表现情况。表1中的一行数据要相应到表2中的1列数据,表2中的1列数据也要相应表1中的1行数据,在以万条计的两张大表中,这个关联成本是相当高的。尽管两张表符合了良好的范式、关联性,防止了冗余、防止了冲突,但在性能上就很差了。相应的改善做法就是不写ID号,而是直接填写球员的名字,假设有重名在后台数据库做一个标识。这样想查询某球员俱乐部表现情况时,就直接到表2中去查询相应的数据信息就可以。从设计上出发,没有一个好的范式、没有一个好的关联设计。但从性能上分析,比一个良好的范式、关联设计体现了更好的性能。

时间: 2024-09-29 00:35:46

oracle调优 浅析关联设计的相关文章

oracle调优 浅析“会话管理开销”

调优之浅析"会话管理开销" [简介] 在调优的过程中,对于会话的管理是比较普遍的问题,因为维护会话的开销相对是比较高的. [过程表现如下] 客户请求(sid)→监听接收到→监听派生出新的进程(systemprocess id)→客户进程 注释: SPID:system process id,表示该serverprocess在OS层面的Process ID(操作系统进程ID); PID:oracle process id,可以理解为Oracle自身使用的进程ID; SID:session

oracle调优 浅析有效的游标管理

浅析有效的游标管理 [思路分析] 能够把游标理解成共享的运行计划,当sql不被共享时.常规的解决思路有两个方向: 1.调整共享池的尺寸(共享池的库缓存区中共享运行计划): 2.sql书写时尽量重用绑定变量,以起到共享sql的作用. [较差的游标管理体现] 1.不重用运行计划(缺少绑定变量) 2.重用的运行计划保留不下来(共享池尺寸过小)

MySQL性能调优与架构设计——第 14 章 可扩展性设计之数据切分

第 14 章 可扩展性设计之数据切分 前言 通过 MySQL Replication 功能所实现的扩展总是会受到数据库大小的限制,一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我们还是会面临到扩展瓶颈.这时候,我们就必须许找其他技术手段来解决这个瓶颈,那就是我们这一章所要介绍恶的数据切分技术. 14.1 何谓数据切分 可能很多读者朋友在网上或者杂志上面都已经多次见到关于数据切分的相关文章了,只不过在有些文章中称之为数据的 Sharding.其实不管是称之为数据的 Shard

[转]MySQL性能调优与架构设计——第11章 常用存储引擎优化

第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处.如何将各种存储引擎在自己的应用环境中结合使用,扬长避短,也是一门不太简单的学问.本章选择最为常用的两种存储引擎进行针对性的优化建议,希望能够对读者朋友有一定的帮助. 11.1 MyI SAM存储引擎优化 我们知道,MyISAM存储引擎是MySQL最为古老的存储引擎之一,也是最为流行的存储引擎之一.对

MySQL性能调优与架构设计——第11章 常用存储引擎优化

第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处.如何将各种存储引擎在自己的应用环境中结合使用,扬长避短,也是一门不太简单的学问.本章选择最为常用的两种存储引擎进行针对性的优化建议,希望能够对读者朋友有一定的帮助. 11.1 MyI SAM存储引擎优化 我们知道,MyISAM存储引擎是MySQL最为古老的存储引擎之一,也是最为流行的存储引擎之一.对

MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化

MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化 前言: 很多人都认为性能是在通过编写代码(程序代码或者是数据库代码)的过程中优化出来的,其实这是一个非常大的误区.真正影响性能最大的部分是在设计中就已经产生了的,后期的优化很多时候所能够带来的改善都只是在解决前妻设计所遗留下来的一些问题而已,而且能够解决的问题通常也比较有限.本章将就如何在 MySQL 数据库 Schema 设计的时候保证尽可能的高效,尽可能减少后期的烦恼. 9.1 高效的模型设计 最规范的就一定

MySQL性能调优与架构设计——第1章 MySQL 基本介绍

MySQL性能调优与架构设计——第1章 MySQL 基本介绍 前言:作为最为流行的开源数据库软件之一, MySQL 数据库软件已经是广为人知了. 但是为了照顾对MySQL还不熟悉的读者,这章我们将对 MySQL 做一个简单的介绍.主要内容包括MySQL 各功能模块组成,各模块协同工作原理, Query 处理的流程等. 1.1 MySQLServer 简介 1.1.1 什么是 MySQLMySQL 是由MySQL AB公司(目前已经被SUN公司收归麾下,SUN已经被Oracle收购)自主研发的,目

oracle调优 性能与安全的权衡

性能与安全的权衡 对于数据库调优而言,没有绝对的性能也没有绝对的安全.正如鱼和熊掌不能兼得一样,是不能完全兼顾的,就像是矛和盾此消彼长.下面就对比较常见的几个因素做一个简要的阐述: 1.多元化控制文件: 多个地方,意味着更安全,一个损坏了可以转储另外一个继续使用.但同样,越多也意味着IO压力越大,一般为2到3个控制文件多元化.比如:假设3个控制文件都损坏的概率已经相当低了,再多的控制文件也就没有意义了.因为一个控制文件损坏,数据库立刻就会崩溃,检查点的发生会产生预警信息,这样就可以根据提示人为的

MySQL性能调优与架构设计——第10章 MySQL数据库Schema设计的性能优化

第10章 MySQL Server性能优化 前言: 本章主要通过针对MySQL Server(mysqld)相关实现机制的分析,得到一些相应的优化建议.主要涉及MySQL的安装以及相关参数设置的优化,但不包括mysqld之外的比如存储引擎相关的参数优化,存储引擎的相关参数设置建议将主要在下一章“常用存储引擎的优化”中进行说明. 10.1 MySQL 安装优化 选择合适的发行版本 1. 二进制发行版(包括RPM等包装好的特定二进制版本) 由于MySQL开源的特性,不仅仅MySQL AB提供了多个平