- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8.关联字段重复严重?先取需要字段GROUP BY(cont.) 先汇总再连接,可以减少参与连接的数据集大小,减少比较次数,从而提高效率。 以下面SQL为例,假设历史表( History )有1亿条记录 左边的SQL,需要进行 1亿 × 90次比较 右边的SQL,则只需要 1亿 × 1 次比较 SELECT H.product_id ,sum(H.account_num) FROM History H , Calendar DT WHERE H.sale_date = DT.calendar_date AND DT.quarter = 3 GROUP BY 1 ; SELECT H.product_id , SUM(H.account_num) FROM History H , (SELECT min(calendar_date) min_date ,max(calendar_date) max_date FROM Calendar WHERE quarter = 3 ) DT WHERE H.sale_date BETWEEN DT.min_date and DT.max_date GROUP BY 1 ; 8.关联字段重复严重?先取需要字段GROUP BY(cont.) select ... zeroifnull(b.xmean_arpu_b) * ( case si_brand when 1 then 60 --old CDMA when 2 then 60 --new CDMA when 3 then 41.3 --GSM else 25.0 END ) / avg(zeroifnull(b.xmean_arpu_b)) OVER (PARTITION BY si_brand) ... from ( select ... ,1 + (row_number() OVER (PARTITION BY si_brand order by arpu_b)-1)*1000 ... from pmarttemp.tb_cpt_val_score) a left join pmarttemp.tb_chn_cmp_score2arpu b on a.q_score = b.xbin 通过PARTITION BY品牌计算平均值, 计算量和关联造成的IO都大 通过PARTITION BY用ROWNUMBER排序,必须的 因为源表是号码级的,且品牌只有4个,对其使用OLAP函数按品牌分区计算平均值。不如用GROUP BY计算出结果后关联,平均值结果就只有4个记录,关联可以说是no cost的! 9.选择正确的字段类型 尽量用整型,不随便用有小数点的类型 算arpu也不要使用float来做字段类型,用decimal能提高运算效率 使用decimal也尽量减少范围,arpu不需要用到(18,2)的长度 WHERE条件中不正确的字段类型会导致不能使用索引 9.选择正确的字段类型 比较规则: 1) 比较两个值(字段),它们的类型必须一样! 2) 当字符(串)与数字相比较时,先把字符(串)转换成数字,再进行比较。 3) 经分系统中容易出错的,有Cal_Month字段 Case 1 Table 1 CREATE TABLE Emp1 (Emp_no CHAR(6), Emp_name CHAR(20)) PRIMARY INDEX (Emp_no); Statement 1 SELECT * FROM Emp1 WHERE Emp_no = 1234; Statement 2 SELECT * FROM Emp1 WHERE Emp_no = 1234; Table 1 CREATE TABLE Emp2 (Emp_no INTEGER, Emp_name CHAR(20)) PRIMARY INDEX (Emp_no); Statement 1 SELECT * FROM Emp2 WHERE Emp_no = 1234; Statement 2 SELECT * FROM Emp2 WHERE Emp_no = 1234; Case 2 Results in Full Table Scan Results in unnecessary conversion 9.选择正确的字段类型 对于使用OLAP函数的字段,吝啬地缩小字段长度,能明显提高性能! Case 1 insert into pmart.tb_DG_uv_itemrank selec
文档评论(0)