摘要:分布式数据库(Distributed DB)是数据库中非常重要的一个部分,随着要处理的数据越来越多,分布式逐渐成为了一种策略。主要有:分布式操作系统,分布式程序设计语言,分布式文件系统,分布式数据库等。今天我们主要学习分布式数据库中常用的查询优化策略。

分布式查询优化的目标

方式一:使总代价最小(总代价 = CPU代价 + I/O代价 + 通信代价)

方式二:响应时间最短

查询代价的估算方法

设一个查询的预期代价为 QC (query cost)

QC = CPU代价 + I/O代价 + 通信代价

其中,通信代价(Transmit Cost)可用如下公式粗略估算:

TC(X) = C0 + C1 * X

1)X 为数据的传输量,通常以 bit 为单位计算

2)C为两站点间通信初始化一次所花费的时间,它由通信系统确定,近似一个常数,以秒(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

它的关系代数表达式为:

  ∏SNAMESEX='M' ^ GRADE>90S.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---查询与优化的更多相关文章

  1. Atitit 如何利用先有索引项进行查询性能优化

    Atitit 如何利用先有索引项进行查询性能优化 1.1. 再分析的话就是我们所写的查询条件,其实大部分情况也无非以下几种:1 1.2. 范围查找 动态索引查找1 1.2.1. 索引联合 所谓的索引联 ...

  2. SQL SERVER 查询性能优化——分析事务与锁(五)

    SQL SERVER 查询性能优化——分析事务与锁(一) SQL SERVER 查询性能优化——分析事务与锁(二) SQL SERVER 查询性能优化——分析事务与锁(三) 上接SQL SERVER ...

  3. 高性能MySQL笔记 第6章 查询性能优化

    6.1 为什么查询速度会慢   查询的生命周期大致可按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端.其中“执行”可以认为是整个生命周期中最重要的阶段. ...

  4. SQL Server 查询性能优化 相关文章

    来自: SQL Server 查询性能优化——堆表.碎片与索引(一) SQL Server 查询性能优化——堆表.碎片与索引(二) SQL Server 查询性能优化——覆盖索引(一) SQL Ser ...

  5. SQL中的连接查询及其优化原则

    连接查询是SQL的主要任务,只有很好的掌握了连接查询及其优化方法才算是掌握了SQL的精髓所在.最近在面试中遇到了有关连接查询的问题,感觉回答的不是很好,总结一下. 具体示例请参考:http://www ...

  6. mysql笔记03 查询性能优化

    查询性能优化 1. 为什么查询速度会慢? 1). 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减 ...

  7. Sql Server查询性能优化之走出索引的误区

    据了解绝大多数开发人员对于索引的理解都是一知半解,局限于大多数日常工作没有机会.也什么没有必要去关心.了解索引,实在哪天某个查询太慢了找到查询条件建个索引就ok,哪天又有个查询慢了,再建立个索引就是, ...

  8. SQL Server查询性能优化——堆表、碎片与索引(二)

    本文是对 SQL Server查询性能优化——堆表.碎片与索引(一)的一些总结.  第一:先对 SQL Server查询性能优化——堆表.碎片与索引(一)中的例一的SET STATISTICS IO之 ...

  9. SQL Server查询性能优化——覆盖索引(二)

    在SQL Server 查询性能优化——覆盖索引(一)中讲了覆盖索引的一些理论. 本文将具体讲一下使用不同索引对查询性能的影响. 下面通过实例,来查看不同的索引结构,如聚集索引.非聚集索引.组合索引等 ...

  10. SQL大量数据查询的优化 及 非用like不可时的处理方案

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

随机推荐

  1. awesome资源包

    .NET资源包 https://github.com/jobbole/awesome-dotnet-cn java资源包 https://github.com/jobbole/awesome-java ...

  2. 60秒的快速巡检Linux服务器性能

    uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz 1 free -m sar -n DEV 1 sar -n TCP, ...

  3. docker项目ssl 安全证书的种种

    一,证书挂着宿主的nginx上 这个很简单,只需要修改宿主nginx的配置文件即可 server { ssl default; server_name www.abc.com; #项目域名 ssl_c ...

  4. WordPress版微信小程序3.1.5版的新功能

    产品的完善是无止境,每过段时间就会发现产品的新问题,使用的人越多,提的需求也会越多,我听得最多的一句话就是:如果加上某某功能就完美了.其实,完美是不存在的,每个人的视角不一样,完美的定义也是不一样的. ...

  5. C# 通过GUID生成不重复的ID

    /// <summary> /// 获得32位字符长度的ID /// </summary> /// <param name="information" ...

  6. Java高级框架-----Spring(一)

    一: 1. Spring几大核心功能: IOC/DI 控制反转/依赖注入 AOP 面向切面编程 声明式事务 2. Spring 框架的的runtime 2.1 test:Spring提供测试功能 2. ...

  7. Postman 中上传图片的接口怎么做参数化呢?

    如题求教,麻烦回复在评论里,不胜感激~

  8. node启动本地服务器

    //下载依赖 cnpm i http cnpm i path cnpm i fsvar http = require('http'); var path = require('path'); var ...

  9. ADB抓取内存命令

    1. 在IDE中查看Log信息当程序运行垃圾回收的时候,会打印一条Log信息,其格式如下:D/dalvikvm: <GC_Reason> <Amount_freed>, < ...

  10. 基于HALCON的模板匹配方法总结

    注:很抱歉,忘记从转载链接了,作者莫怪.... 基于HALCON的模板匹配方法总结 很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总是抽不出时间.去年有过一段时间的集中学习,做了许多 ...