以下内容纯属个人见解,可能不准确或带有偏见。如要转载请注明出处:
一直以来, 认为数据库,操作系统和编译器是真正意义上的纯计算机科学, 或者是传统的计算机科学。离当年跟着某位国内学术新星在课堂上学习数据库已经八年了。唯一的印象就是这位仁兄是个长跑好手(自称)。当年很是 admire。 之后, 虽然也一直用数据库。 包括SQL server, My SQL, DB2, SQLite, derby. 但也就是存取数据加一些简单的index。从现在开始,来好好的研究一下数据库的实现技术。
好,言归正传,我们先来看一看Query Optimization. Query Optimization 是数据库设计的一个关键。如何能够有效的处理join操作,对于性能的影响是巨大的。一个简单例子。所以Query Optimizer 是数据库的一个关键部位。一个Query Optimizer应该提供以下功能[1]:
1. 确定要搜索的plan集合。一个plan代表了一种可能的执行方式。
2. 一种估计方法,可以衡量每一个plan的cost
3. 一种搜索方法, 使得我们可以在这个plan空间内快速的找到最优的plan.
这些功能要求我们去思考以下问题:
1. 如何快速有效地找到一个集合包含了low cost 的plan. 如果我们在query中有n个布尔操作苻。所有的排列将会有n!种。显然我们无法使用包含所有的plan的集合。我们需要一种方法快速选出那些可能是最快的plan
2. 如何准确地评估cost. 一个例子是如果我们应该使join发生在尽量小的两个表中。也就是说我们应该先在大表中选出一个子集再join. 而不是
3. 如何在集合中进行搜索
让我们回到第一个关系数据库SYSTEM-R, 来看一看早年基本问题的定义与解决方案:
综述:
Query Optimization:
(待续)