1,从用户给出的查询请求开始,直到得到查询结果,这一过程称为查询处理。对于一个给定的查询,通常会有许多种可能的执行策略,查询优化就是从众多策略中找出高效执行策略的处理过程。查询处理和优化是DBMS实现的关键技术,对系统性能有很大影响。
2,查询处理的步骤:
①将查询转换成某种内部表示,通常是语法树。
②根据一定的等价变换规则把语法树转换成标准(优化)形式。
③选择低层的操作算法。对于语法树中的每一个操作需要根据存取路径、数据的存储分布、存储数据的聚簇等信息来选择具体的执行算法。
④生成查询计划。查询计划也称查询执行方案,由一系列内部操作组成。这些内部操作按一定的次序构成查询的一个执行方案。通常这样的执行方案有多个,需要对每个执行计划计算代价,从中选择代价最小的一个 。
3,查询优化的优点不仅在于用户不必考虑如何最好地表达查询以获得较好的效率,而且在于系统可以比用户程序的“优化”做得更好, 这是因为:
1)优化器可以从数据字典中获取许多统计信息;2)如果数据库的物理统计信息改变了,系统可以自动对查询进行重新优化以选择相适应的执行计划。在非关系系统中必须重写程序,而重写程序在实际应用中往往是不太可能的;3)优化器可以考虑数百种不同的执行计划,而程序员一般只能考虑有限的几种可能性;4)优化器中包括了很多复杂的优化技术,这些优化技术往往只有最好的程序员才能掌握,系统的自动优化相当于使得所有人都拥有这些优化技术
4,查询优化的路径:
5, 代数优化
代数优化使用等价变换规则来优化关系代数表达式,使优化后的表达式满足原来的查询。
代数优化的基本原则:
6,物理优化
根据系统所提供的存取路径,选择合理的存取策略(例如选用顺序搜索或索引进行查询)称为物理优化;物理优化又称为依赖于存取路径的优化,而代数优化则属于不依赖于存取路径的优化。
- 选择操作优化
选择操作是从关系中选择满足给定条件的元组,从水平方向减小关系的大小,查询优化中的一条基本原则就是选择尽量先做。
选择操作的实现方法包括:
1)顺序扫描:适用于“小”的关系,满足条件的元组比例较大或无其他存取路径。
2) 利用各种存取路径:包括索引(B+树),动态散列
- 连接操作优化
连接是从两个关系的笛卡儿积中选择满足连接条件的元组,操作本身开销大,并且可能产生大的中间结果。
连接操作的实现方法包括: