关系型数据库工作原理-查询优化器(翻译自Coding-Geek文章)
本文翻译自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文章)的更多相关文章
- 关系型数据库工作原理-快速缓存(翻译自Coding-Geek文章)
本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...
- 关系型数据库工作原理-查询优化器之数据访问方式(翻译自Coding-Geek文章)
本文翻译自Coding-Geek文章:< How does a relational database work>.原文链接:http://coding-geek.com/how-data ...
- 关系型数据库工作原理-查询优化器之索引(翻译自Coding-Geek文章)
本文翻译自Coding-Geek文章:< How does a relational database work>.原文链接:http://coding-geek.com/how-data ...
- 关系型数据库工作原理-SQL重写(翻译自Coding-Geek文章)
本文翻译自Coding-Geek文章:< How does a relational database work>.原文链接:http://coding-geek.com/how-data ...
- 关系型数据库工作原理-SQL解析(翻译自Coding-Geek文章)
本文翻译自Coding-Geek文章:< How does a relational database work>.原文链接:http://coding-geek.com/how-data ...
- 关系型数据库工作原理-归并排序(翻译自Coding-Geek文章)
本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...
- 关系型数据库工作原理-时间复杂度(翻译自Coding-Geek文章)
本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...
- 关系型数据库工作原理-事务管理(一)(翻译自Coding-Geek文章)
本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...
- 关系型数据库工作原理-高速缓存(翻译自Coding-Geek文章)
本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...
随机推荐
- NDK开发,如何配置 debug环境
刚开始做NDK 开发的时候,Android Studio 还没提供了 native C/C++ 设置断点 调试,我们都是通过输出 日志来调试,这样费时耗力.Android Studio 应该是在 2. ...
- idea 打开自动编译以及查看Problem窗口
1.打开perference 2.选择Build-Compile-Make Project Automatically自动构建项目
- 关于C/S框架网单表绑定,查询
这种绑定暂时支持单表,并且不支持主键自增长!保存,删除,查看,修改用框架现成的. 1.先生成tb.bll.dal三个类.框架有生成工具,在debug文件里面有个叫CSFramework.Tools.C ...
- # C# 如何调用动态连接库?
导入命名空间 using System.Runtime.InteropServices; 把 非托管DLL放入执行程序同级目录,比如 Debug .Release . [DllImport(" ...
- HDU1560 DNA sequence IDA* + 强力剪枝 [kuangbin带你飞]专题二
题意:给定一些DNA序列,求一个最短序列能够包含所有序列. 思路:记录第i个序列已经被匹配的长度p[i],以及第i序列的原始长度len[i].则有两个剪枝: 剪枝1:直接取最长待匹配长度.1900ms ...
- Codeforces446C - DZY Loves Fibonacci Numbers
Portal Description 给出一个\(n(n\leq3\times10^5)\)个数的序列,进行\(m(m\leq3\times10^5)\)次操作,操作有两种: 给区间\([L,R]\) ...
- SpringCloud入门1-服务注册与发现(Eureka)
前言 Oracle转让Java,各种动态语言的曝光率上升,Java工程师的未来在哪里?我觉得Spring Cloud让未来有无限可能.拖了半年之久的Spring Cloud学习就从今天开始了.中文教材 ...
- Sping Boot入门到实战之入门篇(四):Spring Boot自动化配置
该篇为Sping Boot入门到实战系列入门篇的第四篇.介绍Spring Boot自动化配置的基本原理与实现. Spring Boot之所以受开发者欢迎, 其中最重要的一个因素就是其自动化配置特性 ...
- VUE PK REACT(1)
一.浏览器兼容性 vue: ie9+ react: ie8+ 二.安装使用 vue:1.直接引入 <script src="https://cdn.jsdelivr.net/npm/ ...
- Maven就是这么简单
什么是Maven Maven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,所有的项目配置信息都被定义在一 ...