DDB---查询与优化
摘要:分布式数据库(Distributed DB)是数据库中非常重要的一个部分,随着要处理的数据越来越多,分布式逐渐成为了一种策略。主要有:分布式操作系统,分布式程序设计语言,分布式文件系统,分布式数据库等。今天我们主要学习分布式数据库中常用的查询优化策略。
分布式查询优化的目标
方式一:使总代价最小(总代价 = CPU代价 + I/O代价 + 通信代价)
方式二:响应时间最短
查询代价的估算方法
设一个查询的预期代价为 QC (query cost)
QC = CPU代价 + I/O代价 + 通信代价
其中,通信代价(Transmit Cost)可用如下公式粗略估算:
TC(X) = C0 + C1 * X
1)X 为数据的传输量,通常以 bit 为单位计算
2)C0 为两站点间通信初始化一次所花费的时间,它由通信系统确定,近似一个常数,以秒(s)为单位
3)C1 为传输率(传输速度的倒数),即单位数据传输的时间,单位是 s/bit
分布式查询的层次结构
1)查询分解:将查询问题(例如 SQL 语句)转换为一个定义在全局关系上的关系代数表达式。本层转换所需要的信息在全局概念模式中获得
2)数据本地化:把一个全局关系上的查询,进行具体化(尽可能做到本地化或近本地化)片段上的查询。这一变换所需要的信息在分片模式中片段的分配模式中获得
3)全局优化:找出片段查询的最佳操作次序,包括使得代价函数最小。(基于广域网的分布式 DBMS,通信代价是最为明显的因素)。本层转换所需要的信息来自数据库统计信息,包括各站点片段统计信息、资源信息和通信信息等
4)局部优化:在每一个站点上执行的子查询,被称为局部查询。它由该站点上的 DBMS 进行优化。所需信息取自局部模式
具体优化方法
基于关系代数等价变换的查询优化
基本原理:把查询问题转变为关系代数表达式,分析得到查询树(语法树),进行从全局到片段的变换得到基于片段上的查询树,然后利用关系代数等价变换规则的优化算法,尽可能先执行选择和投影操作。这样,一方面可以减少其后操作的操作量,另一方面可以减少操作次数,对该查询树进行优化,从而达到查询优化的目的。
水平分片关系优化原理:首先,尽可能地把条件选择下移到分片的限定关系处,再把分片的限定关系与选择条件进行比较,然后去掉它们之间存在矛盾的相应片段。如果最后剩下一个水平片段,则在重构全局关系的操作中,就可去掉”并操作“(至少可以减少”并“操作的次数)
S(S#,SNAME,AGE,SEX) -- 数据库全局关系中的 S 表
SC(S#,C#,GRADE) -- 数据库全局关系中的 SC 表 SELECT DISTINCT SNAME FROM S,SC -- 执行的查询语句
WHERE S.S# = SC.S# AND SEX = 'M' AND GRADE > 90
它的关系代数表达式为:
∏SNAME(δSEX='M' ^ GRADE>90(δS.S# = SC.S#)(S X SC))
垂直分片关系优化原理:把垂直分片所用到的属性集,与查询条件(查询表达式)中的投影操作所涉及的属性集相比较,去掉无关的垂直片段。如果只剩下一个垂直片段与查询有关时,就可去掉重构全局关系的”连接“操作(至少可以减少”连接“操作的次数)
--全局关系 EMP(EMP#,DEPT#,SALARY,DEPT#,DNAME) 进行垂直分片
-- E1(EMP#,DEPT#,DNAME)
-- E2 (EMP#,ENAME,SALARY) SELECT ENAME,SALARY FROM EMP -- 执行的查询语句
它的关系代数表达式为:
∏ENAME,SALARY(EMP)
基于半连接算法的查询优化
引入半连接算法的理由:
连接操作是常用而且代价较高的一种操作。目的是为了使分布式数据库系统能有效地处理连接操作,使传输的数据量最少。
半连接操作过程和代价估计:
基于直接连接算法的查询优化
3.1 一般常用策略
3.2 利用站点依赖信息的算法
3.3 分片和复制算法
3.4 站点依赖和数据复制结合
3.5 Hash 划分算法
总结:不同方法的比较
DDB---查询与优化的更多相关文章
- Atitit 如何利用先有索引项进行查询性能优化
Atitit 如何利用先有索引项进行查询性能优化 1.1. 再分析的话就是我们所写的查询条件,其实大部分情况也无非以下几种:1 1.2. 范围查找 动态索引查找1 1.2.1. 索引联合 所谓的索引联 ...
- SQL SERVER 查询性能优化——分析事务与锁(五)
SQL SERVER 查询性能优化——分析事务与锁(一) SQL SERVER 查询性能优化——分析事务与锁(二) SQL SERVER 查询性能优化——分析事务与锁(三) 上接SQL SERVER ...
- 高性能MySQL笔记 第6章 查询性能优化
6.1 为什么查询速度会慢 查询的生命周期大致可按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端.其中“执行”可以认为是整个生命周期中最重要的阶段. ...
- SQL Server 查询性能优化 相关文章
来自: SQL Server 查询性能优化——堆表.碎片与索引(一) SQL Server 查询性能优化——堆表.碎片与索引(二) SQL Server 查询性能优化——覆盖索引(一) SQL Ser ...
- SQL中的连接查询及其优化原则
连接查询是SQL的主要任务,只有很好的掌握了连接查询及其优化方法才算是掌握了SQL的精髓所在.最近在面试中遇到了有关连接查询的问题,感觉回答的不是很好,总结一下. 具体示例请参考:http://www ...
- mysql笔记03 查询性能优化
查询性能优化 1. 为什么查询速度会慢? 1). 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减 ...
- Sql Server查询性能优化之走出索引的误区
据了解绝大多数开发人员对于索引的理解都是一知半解,局限于大多数日常工作没有机会.也什么没有必要去关心.了解索引,实在哪天某个查询太慢了找到查询条件建个索引就ok,哪天又有个查询慢了,再建立个索引就是, ...
- SQL Server查询性能优化——堆表、碎片与索引(二)
本文是对 SQL Server查询性能优化——堆表.碎片与索引(一)的一些总结. 第一:先对 SQL Server查询性能优化——堆表.碎片与索引(一)中的例一的SET STATISTICS IO之 ...
- SQL Server查询性能优化——覆盖索引(二)
在SQL Server 查询性能优化——覆盖索引(一)中讲了覆盖索引的一些理论. 本文将具体讲一下使用不同索引对查询性能的影响. 下面通过实例,来查看不同的索引结构,如聚集索引.非聚集索引.组合索引等 ...
- SQL大量数据查询的优化 及 非用like不可时的处理方案
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
随机推荐
- 在ubuntu中屏蔽“检测到系统程序出现问题”对话框
ubuntu各个版本中都会时常遇到 “检测到系统程序出现问题”对话框 这是由于ubuntu系统中的“Apport”即错误信息的收集报告系统,将所有系统错误告警都不分大小和主次全部通知你,严重影响我们正 ...
- [UE4]让箭头保持水平的第二种方法:Combinrotators、Delta(Rotator)
一.手柄在世界坐标系中有一个绝对朝向,我们可以知道箭头相对于手柄的朝向,相对于手柄的旋转角度. 可以通过手柄绝对朝向.箭头的相对于手柄的朝向计算得到箭头的绝对朝向. 在得到箭头的相对于手柄的角度,在这 ...
- HTML+CSS 对于英文单词强制换行但不截断单词的解决办法
如何处理长的单词和链接(强制换行,连接符,省略号等) 我们在前端开发中经常会遇到一些很长的文本串从它的容器中溢出,例如: 通过这样一段css可以有效解决这种问题: .dont-break-out { ...
- 关于Unity单个对象多个脚本的Update调用的时序问题
先说几句废话, 最近在研究Unity, 这玩意用起来比较简单, 而且商店里还有各种插件, 初学者也能轻松拼凑出一个像模像样的游戏(顺便说一句,自己做着玩就无所谓了,但随便拼凑个辣鸡丢出来骗钱就不好了) ...
- MJRefresh在Xode6中报错处理
MJRefresh在Xcode6中会报错,objc_msgSend(self.beginRefreshingTaget, self.beginRefreshingAction, self),简单调 ...
- 在局域网中搭建自己的gis服务器
在局域网中搭建自己的gis服务器 需求 在客户的B/S应用系统中使用电子地图.该系统只可运行于内部网中. 分析 由于系统中的电子地图只能运行于局域网中所以不能采用googl ...
- 1.Java
面向对象:封装,继承,多态 A组合B:那么B就可以调用A中的方法 A关联B:A中的成员变量是用B声明的 A和B的依赖关系:A中某个方法的参数是B声明的对象或者返回值类型是B的数据类型 Static方法 ...
- Jquery取小数后边2位,N位;jQuery去掉字符串首尾空字符串
function fix(num, N) { , N); return Math.round(num * base) / base; } 实例,取小数后边两位 var yhmoney2 = fix(1 ...
- 检测mysq组复制的脚本
#!/bin/bash PROG_OUT="/root/checkmysql-group.log" # 输出日志到至此文件,建议配置绝对路径 #PROG_OUT="/de ...
- 2489 小b和灯泡
2489 小b和灯泡 2 秒 262,144 KB 10 分 2 级题 小b有n个关闭的灯泡,编号为1...n. 小b会进行n轮操作,第i轮她会将编号为i的倍数的灯泡的开关状态取反,即开变成关,关变成 ...