第六章查询处理与优化主要内容查询处理概览空间操作计算查询优化关系表达式等价规则选择执行计划查询处理概览查询处理是指从数据库中提取数据的一系列活动。主要包括:将用高层数据库语言表示的查询语句翻译为能在文件系统这一物理层次上实现的表达式为优化查询而进行各种转换查询的实际执行输入:SQL语句;输出:满足查询条件的数据查询处理基本步骤语法分析与翻译优化执行关系代数表达式执行计划查询语句查询结果查询处理概览语法分析与翻译优化器执行引擎数据数据有关数据的统计值查询处理概览查询优化概念查询优化是为关系代数表达式的计算选择最有效的查询计划的过程查询执行计划:用于计算查询的原语序列执行原语:加了“如何执行”注释的关系代数运算(选择、投影……)根据选择的算法对文件记录进行操作查询处理概览查询优化过程代数优化力图找出与给定关系代数表达式等价的但执行效率更高的一个表达式执行策略选择对查询语句处理的详细策略的选择选择执行运算所采用的具体算法选择将使用的特定索引等等查询处理概览可能性SQL语言和关系代数表达式的非过程化特点可行性查询优化器具有丰富的可使用信息数据库发生变化时优化器容易再次进行优化优化器能够对多种实现策略逐一进行考虑优化器集中了最优秀的程序员的智慧和经验空间操作计算和关系数据运算的区别空间数据没有公认标准定义的运算,关系数据库中的运算很固定;空间对象的空间位置和范围在二维平面上定义,不能自然排序成一维数组;检测空间关系计算代价非常高,不能再假定空间数据库中I/O代价仍然远超过CPU代价空间操作计算空间操作的基本类型更新操作空间对象的创建、修改和删除空间选择点查询:给定点,找出包含它的空间对象PointQuery,其中:O.G为对象O的几何信息范围查询:给定多边形(矩形时称作“窗口”),找出与之相交的空间对象RangeQuery空间操作计算空间连接空间谓词作为连接条件空间连接的变形-Overlay(地图覆盖/叠加分析)两个空间对象集合合并形成一个新的集合,新对象的集合边界由覆盖操作所指定的非空间属性来决定如征地管理中,范围涉及一块农用地和一块村镇建设用地,征地后统一变成城镇用地。可以是多种空间关系(谓词)相交、包含、距离、西北(方位)、邻接、交叠……例:查找所有“交叠”关系的林分和冲积平原:SELECTfs.name,fp.nameFROMfrorest_standfs.flppdi_plainfpWHEREoverlay(fs.g,fp.g);空间操作计算空间聚集(聚类)空间聚集通常是按距离进行聚集,查找距离给定对象最近的所有对象。例如:找出距离露营地最近的河流空间操作计算空间操作的两步处理过滤步骤空间对象用MBR表示大大降低计算复杂度得到近似的结果精炼步骤采用精确的几何信息进行精确计算计算代价高可能在SDB之外实现空间操作计算空间选择查询两种常用的查询点查询:检索鼠标点中的林分SELECTf.nameFROMforest_standfWHEREwinthin(:point,f.geometry);找出与当前窗口相交的林分,以便显示林分地图SELECTf.nameFROMforest_standfWHEREintersects(f.geometry,:window);对于点查询和范围查询实现方法依赖于数据文件的存储组织主要是过滤步骤。空间操作计算查询的三种算法未排序无索引的数据文件穷举法全表扫描,判别每条记录根据两步处理(过滤+精炼),利用林分的MBR代价O(n),n=关系forest_stand存储的页面数具有空间索引的数据文件普遍采用R树,按照MBR索引,代价O(logn)R树的缺点是MBR允许交叠,可能导致需要搜索多个子树R+树解决了上述问题,但副本的存在可能增加搜索时间和节点溢出空间操作计算采用空间填充曲线散列将二维空间的点映射为一维Z序和Hilbert曲线近似实现保持“位置相邻”映射后采用一般的排序树B树或B+树索引点查询代价O(logBn)范围查询代价O(logBn)+查询结果集大小/记录的聚集程度组合空间选择组合条件表示为合取范式非空间谓词计算代价大致相同,处理顺序不重要空间谓词计算代价高而且差别大,处理顺序对总代价影响大对每个空间谓词计算代价等级选择性:输出集合和输入集合数量比,体现I/O代价差异代价:对单个元组处理的平均代价,体现CPU代价按照代价等级的升序来计算空间谓词空间连接实现由于空间索引的限制,主要考虑过滤步骤(MBR近似计算)嵌套循环有空间索引的嵌套循环基于分块的空间连接类似散列连接空间聚集实现最近邻居算法在空间索引树上进行遍历并修剪子树可扩展为K个最近邻居保留K个最好候选子树或对象空间查询优化查询优化的基本步骤与关系数据库相同代数优化找出等价的但执行效率更高的一个表达式执行策略选择(动态规划)选择执行运算所采用的具体算法选择将使用的特定索引等等需要考虑空间谓词特点计算代价高(可能超过I/O代价)代价差异大(注意计算顺序)代数优化:等价变换规则将一个表达式转换为与之等价的另一个表达式的规则规则来源于代数系统的运算性质交换律结合律分配律生成多个等价表达式为可选的执行计划等价变换规则选择运算的级联:组合选择运算可分解为单个选择运算的序列σθ1∧θ2(E)=σθ1(σθ2(E))尽量将所有非空间条件右移选择运算满足交换律1(σθ2(E))=σθ2(σθ1(E))先计算非空间条件,然后代价低的空间条件投影运算的级联:投影运算序列中只有最后一个运算是需要的,其余的可省略∏L1(∏L2(…(∏Ln(E))…))=∏L1(E)等价变换规则选择与笛卡尔积以及theta连接相结合σθ(E1×E2)=E1||θE2σθ1(E1||θ2E2)=E1||θ1∧θ2E2theta连接运算满足交换律E1||θE2=E2||θE1自然连接也满足交换律E1||E2=E2||E1等价变换规则连接运算的结合律自然连接运算满足结合律(E1||E2)||E3=E1||(E2||E3)theta连接具有以下方式的结合律(E1||θ1E2)||θ2∧θ3E3=E1||θ1∧θ3(E2||θ2E3)其中θ2只涉及E2与E3的属性由于任意一个条件都可为空,因此笛卡尔积运算也具有结合律。等价变换规则选择运算在下面两个条件下对theta连接运算具有分配律当选择条件θ0的所有属性只涉及参与连接运算的表达式之一(E1)时:σθ0(E1||θE2)=(σθ0(E1))||θE2当选择条件θ1只涉及E1的属性,选择条件θ2只涉及E2的属性时:σθ1∧θ2(E1||θE2)=(σθ1(E1))||θ(σθ2(E2))等价变换规则投影运算对theta连接运算具有分配律令L1、L2分别是E1、E2的属性。假设连接条件θ只涉及L1∪L2中的属性,则:∏L1∪L2(E1||θE2)=(∏L1(E1))||θ(∏L2(E2))考虑连接E1||θE2。令L1、L2分别是E1、E2的属性;令L3是E1中出现在连接条件θ中但不在L1∪L2中的属性;令L4是E2中出现在连接条件θ中但不在L1∪L2中的属性。那么:∏L1∪L2(E1||θE2)=∏L1∪L2((∏L1∪L3(E1))||θ(∏L2∪L4(E2)))等价变换规则集合运算并与交满足交换律E1∪E2=E2∪E1E1∩E2=E2∩E1集合差运算不满足交换律集合运算并与交满足结合律(E1∪E2)∪E3=E1∪(E2∪E3)(E1∩E2)∩E3=E1∩(E2∩E3)集合差运算不满足结合律等价变换规则选择运算对并、交、差运算具有分配律σp(E1-E2)=σp(E1)-σp(E2)σp(E1∪E2)=σp(E1)∪σp(E2)σp(E1∩E2)=σp(E1)∩σp(E2)进一步有σp(E1-E2)=σp(E1)-E2σp(E1∩E2)=σp(E1)∩E2但对于∪不成立等价变换规则投影运算对并运算具有分配律∏L(E1∪E2)=(∏L(E1))∪(∏L(E2))等价变换规则规则只说明两个表达式等价,并不说明哪一个更好连接的次序很重要,好的连接次序序列产生小的中间结果对于空间数据库考虑空间谓词计算代价I/O和CPU代价的均衡好的空间谓词计算次序产生小的计算代价规则的使用会产生大量的等价表达式,优化器要采用适当的技术来减少所产生的表达式的数量选择执行计划关系代数表达式的基础上,执行计划进一步说明:每个运算的实现算法各运算的执行顺序是否采用流水线技术注意:每个运算的最小代价算法组合起来不一定是整个表达式的最佳算法,必须考虑各个运算之间的相互作用。选择执行计划的优化算法基于代价的方法通过使用等价规则为给定的查询语句产生一系列查询执行计划,并选择其中代价最小或接近最小的启发式方法运用启发式规则,对关系代数表达式进行等价变换常用的规则:尽早进行选择运算尽早进行投影运算避免进行笛卡尔积运算……基于代价的方法等价于给定查询的不同查询计划可能很多,因此优化的代价太大采用一些预设方法来减少需要考虑的表达式的数目采用启发式方法来减少需考虑的表达式的数目基于代价的方法减少需要考虑的表达式只考虑左深连接次序r1r2r3r4r5左深连接树r1r2r3r4r5非左深连接树基于代价的方法找多个关系的最佳连接顺序时,不是简单地考虑所有的可能顺序,而是为每个子集找出最佳连接顺序,这样能大大减少需要检查的连接顺序的总数如果检查一个表达式的某部分后发现这一部分的最小代价已经比先前已检查过的整个表达式的执行计划的最小代价要大,则可以终止对这个表达式的检查。没有必要对包含该子表达式的任何完整表达式进行检查启发式优化将合取选择分解为单个选择运算的序列,这有助于将选择运算往查询树下层移将非空间选择尽量下移代价小的空间选择下移把选择运算在查询树上下推到最早可能执行的地方例如,尽可能将σθ(r||s)转换成σθ(r)||s或r||σθ(s)考虑CPU代价极高的空间谓词,不一定移到最下启发式优化(例)启发式优化(例)启发式优化(例)启发式优化(例)启发式优化通过使用||的结合律,重新组织查询树,使得具有限制比较严格的选择运算的叶结点关系首先执行将跟有选择条件的笛卡尔积运算替换成连接运算将投影属性加以分解并在查询树上尽可能往下推,必要时可以引入新的投影运算识别那些可用流水方式执行其运算的子树,并采用流水线方法执行之分布式数据库的查询优化全局表和本地表分布与冗余分片策略(垂直分片、水平分片)数据的分布性产生了通信代价尽量减少网络传输消除查询运算无关的数据传输分布式数据库的查询优化半连接选择运算提前,减少需要传输的元组只传输主码或连接属性的不重复值连接完成后,只传输输出属性