Hi Thomas
An approach I've taken to this in the past is to detect changes by comparing staged warehouse data against full source tables at every extract, with updates only written to staging if a difference between source and staging is found. This still requires all source records to be inspected every time, but flagging changed records in staging allows downstream processing to continue on a changes-only basis.
We got away with this because we were in the specific situation of integrating data from lots of small source systems rather than a few very large ones -- so the cost of an individual table compare was acceptable and many different sources were staged in parallel. If this is your situation then this approach might be of use (but I'm aware that it's an unusual scenario!).
Richard