第7章查询优化.ppt

第7章查询优化

分解处理 例:设关系数据库中包括下列关系 SUPPLIER (SNO,SNAME,CITY) (供应者关系) PART (PNO,PNAME,SIZE) (零件关系) PROJECT (JNO,JNAME.CITY ) (工程项目关系) INVENTORY (SN0,PNO,QOH) (库存关系) SUPPPLY (SNO,JNO,PNO,QTY) (供应关系) 条件是:该供应者必须将零件6号螺丝提供给在同一城市的某个工程项目,并且其供应量(QTY)大余1000;以及库存量要大于供应量。 分解处理 RANGE OF S IS SUPPLIER RANGE OF P IS PART RANGE OF J IS PROJECT RANGE OF V IS INVENTORY RANGE OF Y IS SUPPLY RETRIEVE (S.SNAME) WHERE (S.SNO=V.SNO) AND (S.SNO=Y.SNO) AND (S.CITY=J.CITY) AND (P.PN0=Y.PNO) AND (J.JNO)=Y.JNO) AND (V.QOH>Y.QTY) AND (P.PNAME=“DOLTS”) AND (P.SIZE=6) AND (Y.QTY>1000) 见图7-6 SUPPLIER PROJECT SUPPLY INVENTORY PART SNAME SON PNO QTY1000 QOHQTY CITY PNO SNO JNO PNAME= ‘ BOLTS ’ PNO SIZE=6 图7-6 查询的图示 分解处理 一元子查询的提取 例如,图7-6的查询中,有两个一元子查询可以提取出来 RETRIEVE INTO PARTl (P.PNO) WHERE (P.PNAME=“BOLTS”) AND (P.SIZE=6) 和 RETRIEVE INTO SUPPLYl (S.SNO,Y.JNO,Y.PNO,Y.QTY) WHERE Y.QTY>1000 分解处理 在对查询进行语义等价交换时,利用下面的传递性 (a=b) AND (b=c) ? a=c (a>b) AND (b>c) ? a>c 可以通过V.QOH>Y.QTY和Y.QTY>1000导出Y.QOH>1000。 由于S.SNO=V.SNO和S.SNO=Y.SN0可以导出V.SNO=Y.SNO。 由于V.SNO=Y.SNO和Y.SNO=S.SNO隐含了V.SNO=S.SNO,所以V.SNO=S.SNO可以从图7-6中去掉,变成了图7-7的形式 图7-7 一元子查询提取后的形势 SUPPLIER PROJECT SUPPLY1 INVENTORY1 PART1 SNAME PNO QOHQTY CITY PNO SNO JNO PNO. SNO PART SUPPLY INVENTORY PNAME= “BOLTS” PART1 SIZE=6 QTY1000 SUPLY1 QOH1000 INVENTORY1 ( a ) ( b ) 分解处理 化简 一元子查询提取后,则可以进行化简处理。化简是用两个至少是二元的,并且有一个公共的元组变量的查询代替原来多元查询的过程。即 Q(T1,T2,…,Tn)?Q1(T1,T2,…,Ti) 和Q2(Ti+1,Ti+2,…,Tn) 其中,Ti (i=1,2,…,n)是元组变量,Q、Q1、Q2均为查询表达式。 对图7-7中的(b)进行化简,可以得到如图7-8所示的查询 图7-8 分解处理 INGRES对分解处理给出了3条规则。根据这3条规则进行分解处理未必是最优的,但一般的说是能够得到好处的。3条规则是: 1.抽取并处理每一个可提取的一元子查询。 2.只要有可能就进行化简。 3.如果不进行元组代入,则查询处理无法再继续进行下去,选择元组数最少的关系做元组代入 7.4.2 结局处理 INGRES对复杂的多元查询分成两步来进行 分解处理:一个复杂的多元查询经过分解处理、查询逐步变成一系列的简单查询,如图7-9所示。 结局处理:当查询变成二元的或二元以下的简单查询时、存储结构对存取效率的影响逐步变得清晰,这时就要求根据数据的存储结构来最有效的处理这些简单的查询 结局处理 在INGRES中,对数据的实际存取是在处理一元查询时进行的,因此在结局处理中

文档评论(0)

1亿VIP精品文档

相关文档