There can be numerous reasons why. Anything from poorly written SQL, lock contention, DB and DBM configuration issues, old or nonexistant runstats, etc, etc.
The first place I would start would be to generate access plans on the EXACT SQL running. This will let you know if you are doing table scans on the wrong tables. Also you need to monitor the system while queries are active to check for lock contention.
Andy