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 1166 敌兵布阵(线段树 单点更新)
点我看题目 题意 :HDU的中文题也不常见....这道题我就不详述了..... 思路 :这个题用线段树用树状数组都可以,用线段树的时候要注意输入那个地方,输入一个字符串的时候不要紧接着输入两个数字 ...
- 如何避免远程循环执行SSH时,到第一条之后就退出
RT 今天遇到的小问题,记录下来. 据说关键是加 < /dev/null 我也是看网上别人说的,测试成功. #!/bin/bash while read line do echo $line ...
- MSSQL版本
(1)661是sql2008 R2的版本号 Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (Intel X86) Apr 2 201 ...
- Item Import: What Does "Sync" Items Do? (Doc ID 417887.1)
In this Document Goal Solution APPLIES TO: Oracle Item Master - Version 11.5.10.0 to 11.5.10.0 [Rele ...
- ORACLE查看锁(lock)情况
SELECT /*+ RULE */ ls.osuser os_user_name, ls.username user_name, DECODE ...
- MapReduce 模式、算法和用例(MapReduce Patterns, Algorithms, and Use Cases)
在新文章“MapReduce模式.算法和用例”中,Ilya Katsov提供了一个系统化的综述,阐述了能够应用MapReduce框架解决的问题. 文章开始描述了一个非常简单的.作为通用的并行计算框架的 ...
- Com和DCOM
COM,DCOM原理及应用 1.DCOM COM的进程透明特性表现在组件对象和客户程序即可以拥有各自的进程空间,也可以共享同一个进程空间,COM负责把客户的调用正确传到组件对象中,并保证参数传递的正确 ...
- jquery easyui treegrid使用小结
在实际应用中可能会碰到不同的需求,比如会根据每行不同的参数或属性设置来设置同列不同的editor类型,这时原有的例子就显的有点太过简单,不能实现我们的需求,现在应用我在项目中的操作为例,显示下实现同列 ...
- __cdecl、__stdcall、__fastcall、thiscall 进栈、出栈区别
https://en.wikipedia.org/wiki/X86_calling_conventions https://msdn.microsoft.com/en-us/library/984x0 ...
- CCR源码分析-CCR架构
CCR,并发与协调运行时(Concurrency and Coordination Runtime).从名字里我们就可以知道,这个东东是用来简化并发程序设计的.为何要并发呢?因为我们有多个任务需要处理 ...