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中去查询相应的数据信息就可以。从设计上出发,没有一个好的范式、没有一个好的关联设计。但从性能上分析,比一个良好的范式、关联设计体现了更好的性能。
oracle调优 浅析关联设计的更多相关文章
- oracle调优 浅析“会话管理开销”
调优之浅析"会话管理开销" [简单介绍] 在调优的过程中,对于会话的管理是比較普遍的问题,由于维护会话的开销相对是比較高的. [过程表现例如以下] ...
- oracle调优 浅析有效的游标管理
浅析有效的游标管理 [思路分析] 能够把游标理解成共享的运行计划,当sql不被共享时.常规的解决思路有两个方向: 1.调整共享池的尺寸(共享池的库缓存区中共享运行计划): 2.sql书写时尽量重用绑定 ...
- Oracle调优总结(经典实践 重要)
转载:http://langgufu.iteye.com/blog/1974211 Problem Description:1.每个表的结构及主键索引情况2.每个表的count(*)记录是多少3.对于 ...
- MySQL性能优化总结___本文乃《MySQL性能调优与架构设计》读书笔记!
一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎 ...
- MySQL性能调优与架构设计——第 14 章 可扩展性设计之数据切分
第 14 章 可扩展性设计之数据切分 前言 通过 MySQL Replication 功能所实现的扩展总是会受到数据库大小的限制,一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我 ...
- MySQL性能调优与架构设计——第11章 常用存储引擎优化
第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处. ...
- MySQL性能调优与架构设计——第8章 MySQL数据库Query的优化
第8章 MySQL数据库Query的优化 前言: 在之前“影响 MySQL 应用系统性能的相关因素”一章中我们就已经分析过了Query语句对数据库性能的影响非常大,所以本章将专门针对 MySQL 的 ...
- MySQL性能调优与架构设计——第 16 章 MySQL Cluster
第 16 章 MySQL Cluster 前言: MySQL Cluster 是一个基于 NDB Cluster 存储引擎的完整的分布式数据库系统.不仅仅具有高可用性,而且可以自动切分数据,冗余数据等 ...
- MySQL性能调优与架构设计——第10章 MySQL数据库Schema设计的性能优化
第10章 MySQL Server性能优化 前言: 本章主要通过针对MySQL Server(mysqld)相关实现机制的分析,得到一些相应的优化建议.主要涉及MySQL的安装以及相关参数设置的优化, ...
随机推荐
- HDU 1098 Ignatius's puzzle
http://acm.hdu.edu.cn/showproblem.php?pid=1098 题意 :输入一个K,让你找一个a,使得f(x)=5*x^13+13*x^5+k*a*x这个f(x)%65等 ...
- YII AR查询方法
ActiveRecord类文档:http://www.yiiframework.com/doc/guide/1.1/en/database.ar 对于一个Model Post 有如下的4中查询方法,返 ...
- Ember.js demo1
<!DOCTYPE html> <html> <head> <script src="http://code.jquery.com/jquery-1 ...
- Python Anaconda2 (64-bit) 安装后启动jupyter-notebook默认目录更改
看了网上很多关于更改 python notebook的,好麻烦,所以想了一招. python notebook 现在改名叫 jupyter-notebook ,被集成在Anaconda中. Anaco ...
- 【HDOJ】1241 Oil Deposits
经典的BFS. #include <stdio.h> #include <string.h> #define MAXNUM 105 #define MAXROW 105 #de ...
- 【HDOJ】1204 糖果大战
题目本身不难.类似于dp.f(i)表示手中现有i颗糖果赢的概率,则下一局赢的概率是p(1-q),下一局输的概率是q(1-p),下一句平手的概率是1-p(1-q)-q(1-p),平手包括两人均答对或答错 ...
- WIP Job > APP-WIP-25191 or Pending Close
使用 Close Discrete Jobs (FORM) 关闭工单,有一工单的状态一直为PENDING CLOSE 检查 PENDING MATERIAL TRANSACTION ,PENDING ...
- UIButton图片与文字位置调整
1:左图右文 默认效果就行 2:左文右图 UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; [btn addTarget:se ...
- HDU 4746 Mophues 莫比乌斯反演
分析: http://blog.csdn.net/acdreamers/article/details/12871643 分析参见这一篇 http://wenku.baidu.com/view/fbe ...
- ACM2030_机内码
/* 汉字统计 问题说明 统计给定文本文件中汉字的个数. 输入 输入文件首先包含一个整数Ñ,表示测试实例的个数,然后是Ñ段文本. 产量 对于每一段文本,输出其中的汉字的个数,每个测试实例的输出 ...