That is awesome... thanks. I still am not sure exactly though why this take 2 seconds while my methond took over a minute for the same amount of rows. In essence don't the two methods do the same things?
On 11/23/06, mos <[EMAIL PROTECTED]> wrote:
At 05:50 PM 11/23/2006, you wrote: >I have the following query: > > UPDATE companies c > SET > total_annual_service_charge = > ( > SELECT SUM(annual_service_charge) > FROM purchased_services ps WHERE ps.company_id = c.id > ); > > >It takes 1s to run when I have two tables of 500 rows, 4s with two >tables of 1000 rows, 15s to run with two tables to run with 2000 rows, >90s for two tables of 5000 rows. This is ridiculous. And I need to >run it on two tables of approx. 500,000 rows. I need a better >solution. > >And there is an index on ps.company_id and c.id. Any suggestions on >how I can improve my query? > >-- >John Kopanas >[EMAIL PROTECTED] John, I would split it into separate sql statements. 1) Create a memory table of the totals: drop table if exists CompanyTotals; create table CompanyTotals type=memory select Company_Id Id, SUM(annual_service_charge) ServCharge FROM purchased_services ps group by Company_Id; alter table CompanyTotals add index ix_Id (Id); 2) Update the Companies table with the CompanyTotals: update Companies C, CompanyTotals CT set total_annual_service_charge=CT.ServCharge where C.Id=CT.Id; This should be much faster. Mike >http://www.kopanas.com >http://www.cusec.net >http://www.soen.info > >-- >MySQL General Mailing List >For list archives: http://lists.mysql.com/mysql >To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED] -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]
-- John Kopanas [EMAIL PROTECTED] http://www.kopanas.com http://www.cusec.net http://www.soen.info -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]