I have correct indexes and this seems to be very simple query...but it takes soooo long to finish it...

This is a select for this update

SQLWKS> select nvl(sum(Exp_Project_Amount),0.0) , nvl(sum(Exp_Base_Amount),0.0) ,WorkCalcs_Expenses, WorkCalcs_Expenses_Base
2> from mwebExpense , mwebworkcalcs
3> where exp_work_id=mwebWorkCalcs.WorkCalcs_Work_ID and workcalcs_WORK_ENTITY_TYPE =4
4> group by WorkCalcs_Expenses, WorkCalcs_Expenses_Base ;
NVL(SUM(EX NVL(SUM(EX WORKCALCS_ WORKCALCS_
---------- ---------- ---------- ----------
50 50 50 50
4.2 4.2 4.2 4.2
6.5 6.5 6.5 6.5
13.6 13.6 13.6 13.6
30.12 30.12 30.12 30.12
843.49 615.21 843.49 615.21
876.31 876.31 876.31 876.31
899.44 899.44 899.44 899.44
1096.06 1096.06 1096.06 1096.06
1205.8 1205.8 1205.8 1205.8
2443.3 2443.3 2443.3 2443.3
13340.12 13340.12 13340.12 13340.12
12 rows selected.
Parse 0.01 (Elapsed) 0.00 (CPU)
Execute/Fetch 0.08 (Elapsed) 0.02 (CPU)
Total 0.09 0.02

This is the update, it says updated 34458 rows , why ? Also it takes so long to do this..
There is a index on exp_work_id, and WorkCalcs_Work_ID is primary key.

SQLWKS> Update mwebWorkCalcs a
2> set (a.WorkCalcs_Expenses, a.WorkCalcs_Expenses_Base) =
3> (select nvl(sum(Exp_Project_Amount),0.0) , nvl(sum(Exp_Base_Amount),0.0)
4> from mwebExpense
5> where exp_work_id=a.WorkCalcs_Work_ID )
6> where a.workcalcs_WORK_ENTITY_TYPE=4;
34458 rows processed.
Parse 0.00 (Elapsed) 0.00 (CPU)
Execute/Fetch 180.40 (Elapsed) 0.00 (CPU)
Total 180.40 0.00


SQLWKS> select count(*) from mwebexpense;
COUNT(*)
----------
3802


SQLWKS> select count(*) from mwebworkcalcs;
COUNT(*)
----------
46293


Any help please ?

Thanks
Sonali