作者 · 2012-10-22 03:42
· 数据仓库SQL编写规范 字数 771 阅读 3974 评论 6 赞 0
数据仓库SQL编写规范:
这里只突出讲4点
1. 在where子句中,尽量避免对table column使用function
在table
column上使用function,会使得相应的index和statistics无法生效。有时候function的使用不是必须的,只是由于数据的
不规范,不得不使用。比如source_code字段中既有" ABC" 又有
"ABC",这时候你就不得不在where里使用trim(source_code)='ABC'。对于这种情况最好能修改和规范ETL,以避免使用
function。
2。尽量避免outer join
数据仓库中的查询join往往很多。join不可怕,可怕的是不必要的outer join. 很多时候查询编写人员使用outer
join,不是因为必须如此,而是由于编写人员对数据的内容和逻辑关系没有深究,为保险起见,即使inner join成立也写成outer join.
3. 尽早尽可能的过滤掉大部分数据,尤其是join多个表时。
这个不言而喻。
4.如果表是建在multi-partition tablespace上,在join时不要忘记尽可能的collocated join.
这一条对于使用DB2 DPF的人很重要,但也很容易被忽视。主要是由于以下原因
1) 查询编写人员根本没有collocated join的概念
2) 查询编写人员根本不知道表的partition key是什么。
3) 查询编写人员只注意从逻辑上匹配join的相关字段,而忽略了这个可能逻辑上多于但能促进collocated join的匹配条件。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
分享
添加新评论6 条评论
2013-03-07 11:22
2013-01-11 21:17
2013-01-10 15:43
2013-01-08 14:51
2012-10-28 10:30
例如: 有A和B两个表都是以account_id为partition key, 同时我们也知道当A.item_id=B.item_id时A.account_id一定也等于B.account_id 那么下面两个查询,2)的运行效率要高于1) 因为当2)的时候db2 optimizer知道join的数据是collocated.
1) select A.col1, B.col2
from A inner join B
on (A.item_id=B.item_id)
2) select A.col1, B.col2
from A inner join B
on (A.item_id=B.item_id and A.account_id=B.account_id)
2012-10-27 11:48