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的安装以及相关参数设置的优化, ...
随机推荐
- Delphi GDI+ Library
GDI+ LibraryThis library enables GDI+ functionality for Delphi 2009 and later. It differs from other ...
- php 中奖概率算法
我们先完成后台PHP的流程,PHP的主要工作是负责配置奖项及对应的中奖概率,当前端页面点击翻动某个方块时会想后台PHP发送ajax请求,那么后台PHP根据配置的概率,通过概率算法给出中奖结果,同时将未 ...
- javascript小游戏--生命游戏
昨天参加Code Retreat的活动,"Code Retreat是一个一天的集中练习的活动,专注于软件开发和设计的基础". 要了解更多信息可前往 CodeRetreat官网 通过 ...
- c/c++ void 指针
原文 : http://blog.csdn.net/yyyuhan/article/details/3153290 1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使 ...
- MySQL 授权详解
(1)确认一下3306是否对外开放,mysql默认状态下是不开放对外访问功能的.查看的办法如下: 1 2 3 4 5 6 7 netstat -an | grep 3306 tcp 0 ...
- bzoj1976
终于忙完期末考试了,即将进入愉快的暑假(虽然暑假作业奇多,但好歹终于能有大量时间刷题了) 先把上次新一类最小割留下的一道题目A了复习一下: 题目看起来很复杂,实际上和bzoj2132是同一个类型的 用 ...
- Master Nginx(4) - Nginx as a Reverse Proxy
Introduction to reverse proxying the proxy module legacy servers with cookies the upstream module ke ...
- Bootstrap中的less基础
在线编译 因为 less 的语法毕竟相对简单,所以一些在线工具可以很轻松的做到.比如 http://less.cnodejs.net http://www.ostools.net/less 一般都有 ...
- 1.进入debug模式(基础知识列表)
1.进入debug模式(基础知识列表)1.设置断点 2.启动servers端的debug模式 3.运行程序,在后台遇到断点时,进入debug调试状态 ========================= ...
- DOM(文本对象模型)简介
DOM(文本对象模型)简介 在正式开始介绍jQuery处理XML前我们来了解一些必备的基础知识. DOM是HTML或者XML结构的一种展现形式,通过编程对DOM进行修改可以达到修改HTML/XML的目 ...