ETL性能优化

现有orders表和orderdetails表表示订单和订单的详细情况,字段如下:

orders:orderid(pk),orderdate(date),customernumber(number)

orderdetails:orderid(pk),orderdetailsid(pk),price,quantity,product_id

现在数据库要更新orders表的数据,级联的就会更新orderdetails表的数据,然后我们刷新数据仓库乙的事实表orderdetails,一开始的执行思路可能是这样的:

step1:从orders表读某个条件的数据,我们比方说orderdate大于2008年4月,然后我们只要orderid,sql象下面这个样子

selectorderidfromorderswhereorderdate<2008年四月.

step2:把orderid当成参数传给orderdetails,然后读取所有符合orders表里面orderid的orderdetails记录:

select*fromorderdetailswhereorderid=?(这个?的参数是由前面一个步骤来的)(这个读取的过程是大量循环的读取)

step3:然后把这些orderdetails记录怎么样到数据仓库乙……..

*************

step1:

selectorderdetails.orderid,orderdetailsid,price,quantity,product_id

fromorders,orderdetails

whereorders.orderid=orderdetails.orderid

andorders.orderdate<2008年四月

step2:更新数据仓库乙中的对应数据.

两个ETL设计的结果相同,性能天壤之别

查看完整版:ETL性能优化

相关推荐