Note09- 查询优化

设有如下两个关系:

有如下 SQL 语句:

SELECT DISTINCT S.SN
FROM S,SC
WHERE S.S#=SC.S# AND SC.C#='C2'

我们可以将它转换为多种等价的关系代数表达式,且执行效率很可能有较大差别

关系代数等价转换规则

表达式结果大小的估计

定义如下符号:

rA 属性上的取值分布是均匀的,运算结果大小的估计如下:

启发式关系代数优化算法

具体算法如下:

举例

查询:查出 1978 年 1 月 1 日前被借出的所有书的书名

SELECT Title FROM XLOANS WHERE Data <= 1/1/78

XLOANS 视图为

CREATE VIEW XLOANS as SELECT * 
FROM LOANS, BORROWERS,
WHERE BORROWERS.CARD_NO=LOANS.CARD_NO AND BOOKS.LC_NO=LOANS.LC_NO

转换成关系代数表达式:ΠTITLE(σData<=1/1/78(XLOANS))

首先,我们要将选择表达式变成串接的形式,然后对于每个选择,尽可能把它移至树的底部

对每个投影,尽可能移动到底部,由 ΠTITLE=ΠTITLE(ΠTITLE,BOOKS.LC_NO,LOANS.LC_NO)

类似处理 BORRWERS 和 LOANS 的投影:

然后分组: