本文翻译自Coding-Geek文章:《 How does a relational database work》。原文链接:http://coding-geek.com/how-databases-work/#Buffer-Replacement_strategies

本文翻译了如下章节, 介绍数据库的查询优化器:

Query optimizer–查询优化器

当前所有流行的数据库都使用基于成本的算法(CBO)优化查询SQL。其思路是为所有的操作指令赋予一个成本值,然后找出能降低成本的最优指令执行链。

为了帮助理解基于成本的优化器是如何工作的,最好的方式是通过一些样例来感受它的复杂性。在整个章节中我将通过三个常用联表操作来说明数据库是如何做优化的,你可以看到即使是对一个最简单的联表查询语句做优化也是十分复杂的。最后我们来看一下真实的数据库优化器是如何做的。

在这些例子中我将聚焦在分析时间复杂度上面,而一个真实的数据库优化器将同时考虑CPU消耗,磁盘I/O消耗和内存需求(译者:类似于程序算法的复杂度度量方式,O(1)、O(n))。

分析时间复杂度和CPU指令执行成本是有一些差异,但是非常近似。如果是分析CPU指令执行成本,我需要计算所有SQL语句的指令条数,包括加法、条件语句、乘法、循环…等等。甚者还要考虑:

  • 每一条高级语言的代码语句都有对应数量的低级语言(汇编语言)指令。
  • 使用不同的CPU芯片(Core i7, an Intel Pentium 4, an AMD Opteron….),指令的执行成本是不一样的。也就是说,它还取决于不同的CPU架构。

统一使用时间复杂度来度量就简单很多,也不影响我们理解CBO的本质。有时间我也会把磁盘I/O单独拿出来讲,因为它很重要。很多时候,数据库瓶颈在磁盘I/O而不是CPU。

关系型数据库工作原理-查询优化器(翻译自Coding-Geek文章)的更多相关文章

  1. 关系型数据库工作原理-快速缓存(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...

  2. 关系型数据库工作原理-查询优化器之数据访问方式(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>.原文链接:http://coding-geek.com/how-data ...

  3. 关系型数据库工作原理-查询优化器之索引(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>.原文链接:http://coding-geek.com/how-data ...

  4. 关系型数据库工作原理-SQL重写(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>.原文链接:http://coding-geek.com/how-data ...

  5. 关系型数据库工作原理-SQL解析(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>.原文链接:http://coding-geek.com/how-data ...

  6. 关系型数据库工作原理-归并排序(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...

  7. 关系型数据库工作原理-时间复杂度(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...

  8. 关系型数据库工作原理-事务管理(一)(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...

  9. 关系型数据库工作原理-高速缓存(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...

随机推荐

  1. 利用while语句,条件为输入的字符不为'\n'.

    题目:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. 1.程序分析:利用while语句,条件为输入的字符不为'\n'. 一个很简单的问题,其实换种方式就能完成,但是我就想怎么着才能 ...

  2. eclipse中创建一个maven项目

    1.什么是Maven Apache Maven 是一个项目管理和整合工具.基于工程对象模型(POM)的概念,通过一个中央信息管理模块,Maven 能够管理项目的构建.报告和文档. Maven工程结构和 ...

  3. Python基于Flask框架配置依赖包信息的项目迁移部署小技巧

    一般在本机上完成基于Flask框架的代码编写后,如果有接口或者数据操作方面需求需要把代码部署到指定服务器上. 一般情况下,使用Flask框架开发者大多数都是选择Python虚拟环境来运行项目,不同的虚 ...

  4. init启动进程

    init启动进程需要读取()配置文件 1,启动init进程的配置文件是/etc/inittab 2,/etc/sysvinit是系统初始化用的   /sbin/init在核心完整的加载后,开始运行系统 ...

  5. iOS学习 NSString常用技巧

    字符串是程序设计最常用的数据类型之一了.在Mac/iPhone编程中,苹果为我们提供了一个不同的字符串类型NSString.有别与普通的String为数据类型,NSString其实是一个对象类型.NS ...

  6. js将汉字转为相应的拼音

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  7. 第I篇PCI体系结构概述

    PCI总线作为处理器系统的局部总线,主要目的是为了连接外部设备,而不是作为处理器的系统总线连接Cache和主存储器.但是PCI总线.系统总线和处理器体系结构之间依然存在着紧密的联系. PCI总线作为系 ...

  8. 在windows XP系统下编译和使用ffmpeg

    最近在做流媒体开发这一块,在服务器端,所用的live555不支持mp4,avi等视频容器格式,所以打算运用ffmpeg来进行扩展.将MP4文件先运用ffmpeg进行解析,解析成live555所支持的基 ...

  9. mongodb3.0分片及java代码连接操作测试(开启用户验证)

    最近抽时间搭建了一下mongodb简单的分片,整个过程还算是蛮顺利,只不过在用户验证这一块遇到了一些问题,好在最后终于搞定. 一.服务器搭建过程: 1.安装四个mongodb:一个作为config.一 ...

  10. Flex中通过RadioButton进行切换

    1.页面切换 <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx=& ...