加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

teradata sql优化之qualify子句优化

(2012-08-14 14:42:15)
标签:

杂谈

分类: 技术
teradata sql中,各子句的执行顺序为where->join->qualify->select,优化的目的就是最小化I/O,所以确保每个步骤过滤掉尽可能多的记录是很重要的。
 
下面这个例子主要描述qualify对语句的影响:
CREATE VOLATILE MULTISET TABLE A10_tmp,NO log AS       --取area_id         
(
SELECT
                A.*
                ,b.area_id custom_area_id
FROM xx_asset_k a Left Join
xxx.OFR_ASSET_MKT_HIST_a b
 ON a.Asset_Row_Id = b.Asset_Row_Id
QUALIFY ROW_NUMBER() OVER(PARTITION BY b.Asset_Row_Id
ORDER BY Serv_Seq_Nbr DESC) = 1                             
) With data
PRIMARY INDEX (Asset_Row_Id)
 ON
COMMIT PRESERVE ROWS;
 
该语句中的qualify子句只引用了一个表xxx.OFR_ASSET_MKT_HIST_a,并且对于每个asset_row_id,都有1个到10多个Serv_Seq_Nbr,由于优化器先进行两表关联操作,这就会导致要关联的记录有很多的重复并产生更多的结果集。
 
所以,对于该语句的优化,只要改变执行计划确保优化器先对b表进行排重操作即可。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有