[Rails] optimization

Bob Aman vacindak at gmail.com
Fri Mar 4 02:17:40 GMT 2005


Ok, so, I've written my first app in rails.  It's pretty nifty.  Only
one problem.  Slower than you could possibly comprehend.

Processing PersonController#show (for 67.138.254.231 at Thu Mar 03
21:04:16 Eastern Standard Time 2005)
  Parameters: {:id=>"1", :controller=>"person", :action=>"show"}
  Person Load (0.219000)   SELECT * FROM people WHERE
id = '1' LIMIT 1
  Person Columns (0.203000)   SHOW FIELDS FROM people
Rendering person/show within layouts/xhtml11common
  Account Load (0.203000)   SELECT * FROM accounts
WHERE service_id = 6 AND person_id = 1 LIMIT 1
  Account Columns (0.234000)   SHOW FIELDS FROM accounts
  Account Load (0.234000)   SELECT * FROM accounts
WHERE service_id = 6 AND person_id = 1 LIMIT 1
  Account Load (0.234000)   SELECT * FROM accounts
WHERE service_id = 6 AND person_id = 1 LIMIT 1
  Nickname Load (0.219000)   SELECT * FROM nicknames
WHERE person_id = 1 
  Nickname Columns (0.203000)   SHOW FIELDS FROM nicknames
  Phonenumber Load (0.219000)   SELECT * FROM
phonenumbers WHERE person_id = 1 
  Phonenumber Columns (0.219000)   SHOW FIELDS FROM
phonenumbers
  Account Load (0.203000)   SELECT * FROM accounts
WHERE service_id = 6 AND person_id = 1 LIMIT 1
  Account Load (0.234000)   SELECT * FROM accounts
WHERE service_id = 6 AND person_id = 1 LIMIT 1
  Account Load (0.125000)   SELECT * FROM accounts
WHERE service_id = 6 AND person_id = 1 LIMIT 1
  Account Load (0.125000)   SELECT * FROM accounts
WHERE service_id = 6 AND person_id = 1 LIMIT 1
  Account Load (0.266000)   SELECT * FROM accounts
WHERE service_id = 6 AND person_id = 1 LIMIT 1
  Account Load (0.110000)   SELECT * FROM accounts
WHERE service_id = 6 AND person_id = 1 LIMIT 1
  Account Load (0.109000)   SELECT * FROM accounts
WHERE service_id = 6 AND person_id = 1 LIMIT 1
  Account Load (0.125000)   SELECT * FROM accounts
WHERE service_id = 6 AND person_id = 1 LIMIT 1
  Account Count (0.110000)   SELECT COUNT(*) FROM
accounts WHERE person_id = 1 
  Account Load (0.140000)   SELECT * FROM accounts
WHERE person_id = 1 
  Interest Load (0.125000)   SELECT t.*, j.* FROM
interests_people j, interests t WHERE t.id = j.interest_id AND
j.person_id = 1 ORDER BY t.id
  Service Load (0.110000)   SELECT * FROM services
WHERE id = 5 LIMIT 1
  Service Columns (0.110000)   SHOW FIELDS FROM services
  Account Count (0.109000)   SELECT COUNT(*) FROM
accounts WHERE service_id = 5 
  Account Load (0.109000)   SELECT * FROM accounts
WHERE service_id = 5 
  Service Load (0.110000)   SELECT * FROM services
WHERE id = 2 LIMIT 1
  Account Count (0.125000)   SELECT COUNT(*) FROM
accounts WHERE service_id = 2 
  Account Load (0.109000)   SELECT * FROM accounts
WHERE service_id = 2 
  Service Load (0.109000)   SELECT * FROM services
WHERE id = 1 LIMIT 1
  Account Count (0.110000)   SELECT COUNT(*) FROM
accounts WHERE service_id = 1 
  Account Load (0.109000)   SELECT * FROM accounts
WHERE service_id = 1 
  Service Load (0.109000)   SELECT * FROM services
WHERE id = 7 LIMIT 1
  Account Count (0.110000)   SELECT COUNT(*) FROM
accounts WHERE service_id = 7 
  Account Load (0.125000)   SELECT * FROM accounts
WHERE service_id = 7 
  Service Load (0.109000)   SELECT * FROM services
WHERE id = 8 LIMIT 1
  Account Count (0.109000)   SELECT COUNT(*) FROM
accounts WHERE service_id = 8 
  Account Load (0.125000)   SELECT * FROM accounts
WHERE service_id = 8 
  Service Load (0.110000)   SELECT * FROM services
WHERE id = 4 LIMIT 1
  Account Count (0.109000)   SELECT COUNT(*) FROM
accounts WHERE service_id = 4 
  Account Load (0.156000)   SELECT * FROM accounts
WHERE service_id = 4 
  Service Load (0.109000)   SELECT * FROM services
WHERE id = 6 LIMIT 1
  Account Count (0.110000)   SELECT COUNT(*) FROM
accounts WHERE service_id = 6 
  Account Load (0.172000)   SELECT * FROM accounts
WHERE service_id = 6 
  Service Load (0.125000)   SELECT * FROM services
WHERE id = 3 LIMIT 1
  Account Count (0.109000)   SELECT COUNT(*) FROM
accounts WHERE service_id = 3 
  Account Load (0.141000)   SELECT * FROM accounts
WHERE service_id = 3 
  Service Load (0.156000)   SELECT * FROM services
WHERE id = 9 LIMIT 1
  Account Count (0.219000)   SELECT COUNT(*) FROM
accounts WHERE service_id = 9 
  Account Load (0.203000)   SELECT * FROM accounts
WHERE service_id = 9 
  Service Load (0.218000)   SELECT * FROM services
WHERE id = 10 LIMIT 1
  Account Count (0.204000)   SELECT COUNT(*) FROM
accounts WHERE service_id = 10 
  Account Load (0.234000)   SELECT * FROM accounts
WHERE service_id = 10 
  Service Load (0.281000)   SELECT * FROM services
WHERE id = 11 LIMIT 1
  Account Count (0.203000)   SELECT COUNT(*) FROM
accounts WHERE service_id = 11 
  Account Load (0.235000)   SELECT * FROM accounts
WHERE service_id = 11 
  Service Load (0.187000)   SELECT * FROM services
WHERE id = 12 LIMIT 1
  Account Count (0.219000)   SELECT COUNT(*) FROM
accounts WHERE service_id = 12 
  Account Load (0.203000)   SELECT * FROM accounts
WHERE service_id = 12 
  Service Load (0.219000)   SELECT * FROM services
WHERE id = 13 LIMIT 1
  Account Count (0.265000)   SELECT COUNT(*) FROM
accounts WHERE service_id = 13 
  Account Load (0.266000)   SELECT * FROM accounts
WHERE service_id = 13 
  Service Load (0.219000)   SELECT * FROM services
WHERE id = 14 LIMIT 1
  Account Count (0.266000)   SELECT COUNT(*) FROM
accounts WHERE service_id = 14 
  Account Load (0.297000)   SELECT * FROM accounts
WHERE service_id = 14 
  Interest Columns (0.234000)   SHOW FIELDS FROM interests
  Person Load (0.234000)   SELECT t.*, j.* FROM
interests_people j, people t WHERE t.id = j.person_id AND
j.interest_id = 1 ORDER BY t.id
  Person Load (0.297000)   SELECT t.*, j.* FROM
interests_people j, people t WHERE t.id = j.person_id AND
j.interest_id = 2 ORDER BY t.id
  Person Load (0.203000)   SELECT t.*, j.* FROM
interests_people j, people t WHERE t.id = j.person_id AND
j.interest_id = 3 ORDER BY t.id
  Person Load (0.406000)   SELECT t.*, j.* FROM
interests_people j, people t WHERE t.id = j.person_id AND
j.interest_id = 6 ORDER BY t.id
  Person Load (0.219000)   SELECT t.*, j.* FROM
interests_people j, people t WHERE t.id = j.person_id AND
j.interest_id = 7 ORDER BY t.id
  Person Load (0.281000)   SELECT t.*, j.* FROM
interests_people j, people t WHERE t.id = j.person_id AND
j.interest_id = 8 ORDER BY t.id
  Skill Count (0.297000)   SELECT COUNT(*) FROM
skills WHERE person_id = 1 
  Skill Load (0.203000)   SELECT * FROM skills WHERE
person_id = 1 
  Skill Columns (0.235000)   SHOW FIELDS FROM skills
  Skill Load (0.234000)   SELECT * FROM skills WHERE
name = 'Ruby' 
  Person Load (0.234000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.328000)   SELECT * FROM skills WHERE
name = 'Ruby' 
  Person Load (0.313000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.266000)   SELECT * FROM skills WHERE
name = 'Ruby' 
  Person Load (0.359000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.187000)   SELECT * FROM skills WHERE
name = 'PHP' 
  Person Load (0.235000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.203000)   SELECT * FROM skills WHERE
name = 'PHP' 
  Person Load (0.250000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.297000)   SELECT * FROM skills WHERE
name = 'PHP' 
  Person Load (0.234000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.891000)   SELECT * FROM skills WHERE
name = 'C#' 
  Person Load (0.125000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.125000)   SELECT * FROM skills WHERE
name = 'C#' 
  Person Load (0.125000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.140000)   SELECT * FROM skills WHERE
name = 'C#' 
  Person Load (0.125000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.172000)   SELECT * FROM skills WHERE
name = 'Java' 
  Person Load (0.125000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Person Load (0.203000)   SELECT * FROM people WHERE
id = 4 LIMIT 1
  Skill Load (0.219000)   SELECT * FROM skills WHERE
name = 'Java' 
  Person Load (0.141000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Person Load (0.219000)   SELECT * FROM people WHERE
id = 4 LIMIT 1
  Skill Load (0.187000)   SELECT * FROM skills WHERE
name = 'Java' 
  Person Load (0.156000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Person Load (0.125000)   SELECT * FROM people WHERE
id = 4 LIMIT 1
  Skill Load (0.110000)   SELECT * FROM skills WHERE
name = 'HTML' 
  Person Load (0.125000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.109000)   SELECT * FROM skills WHERE
name = 'HTML' 
  Person Load (0.125000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.109000)   SELECT * FROM skills WHERE
name = 'HTML' 
  Person Load (0.125000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.110000)   SELECT * FROM skills WHERE
name = 'Scheme' 
  Person Load (0.125000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.094000)   SELECT * FROM skills WHERE
name = 'Scheme' 
  Person Load (0.109000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.110000)   SELECT * FROM skills WHERE
name = 'Scheme' 
  Person Load (0.110000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.140000)   SELECT * FROM skills WHERE
name = 'JavaScript' 
  Person Load (0.125000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.547000)   SELECT * FROM skills WHERE
name = 'JavaScript' 
  Person Load (0.141000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.156000)   SELECT * FROM skills WHERE
name = 'JavaScript' 
  Person Load (0.125000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.109000)   SELECT * FROM skills WHERE
name = 'CSS' 
  Person Load (0.125000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.110000)   SELECT * FROM skills WHERE
name = 'CSS' 
  Person Load (0.125000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.109000)   SELECT * FROM skills WHERE
name = 'CSS' 
  Person Load (0.109000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.094000)   SELECT * FROM skills WHERE
name = 'SQL' 
  Person Load (0.125000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.109000)   SELECT * FROM skills WHERE
name = 'SQL' 
  Person Load (0.109000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Skill Load (0.094000)   SELECT * FROM skills WHERE
name = 'SQL' 
  Person Load (0.203000)   SELECT * FROM people WHERE
id = 1 LIMIT 1
  Person Load (0.141000)   SELECT people.* FROM
people JOIN relations ON relations.to_id = people.id WHERE
relations.from_id = 1 AND (relations.relationship = 'romantic' OR
relations.relationship = 'friend')
  Person Load (0.140000)   SELECT people.* FROM
people JOIN relations ON relations.to_id = people.id WHERE
relations.from_id = 1 AND (relations.relationship = 'romantic' OR
relations.relationship = 'friend')
  Person Load (0.422000)   SELECT people.* FROM
people JOIN relations ON relations.to_id = people.id WHERE
relations.from_id = 1 AND (relations.relationship = 'romantic' OR
relations.relationship = 'friend')
  Relation Load (0.125000)   SELECT * FROM relations
WHERE from_id = 1 
  Relation Columns (0.484000)   SHOW FIELDS FROM relations
  Relation Load (0.188000)   SELECT * FROM relations
WHERE from_id = 2 and to_id = 1 LIMIT 1
  Person Load (0.171000)   SELECT * FROM people WHERE
id = 2 LIMIT 1
  Relation Load (0.141000)   SELECT * FROM relations
WHERE from_id = 3 and to_id = 1 LIMIT 1
  Person Load (0.109000)   SELECT * FROM people WHERE
id = 3 LIMIT 1
  Relation Load (0.110000)   SELECT * FROM relations
WHERE from_id = 4 and to_id = 1 LIMIT 1
  Person Load (0.110000)   SELECT * FROM people WHERE
id = 4 LIMIT 1
  Relation Load (0.109000)   SELECT * FROM relations
WHERE from_id = 5 and to_id = 1 LIMIT 1
  Person Load (0.125000)   SELECT * FROM people WHERE
id = 5 LIMIT 1
  Relation Load (0.110000)   SELECT * FROM relations
WHERE from_id = 6 and to_id = 1 LIMIT 1
  Person Load (0.125000)   SELECT * FROM people WHERE
id = 6 LIMIT 1
  Relation Load (0.110000)   SELECT * FROM relations
WHERE from_id = 7 and to_id = 1 LIMIT 1
  Person Load (0.125000)   SELECT * FROM people WHERE
id = 7 LIMIT 1
  Relation Load (0.171000)   SELECT * FROM relations
WHERE from_id = 21 and to_id = 1 LIMIT 1
  Person Load (0.219000)   SELECT * FROM people WHERE
id = 21 LIMIT 1
  Relation Load (0.297000)   SELECT * FROM relations
WHERE from_id = 15 and to_id = 1 LIMIT 1
  Person Load (0.219000)   SELECT * FROM people WHERE
id = 15 LIMIT 1
  Relation Load (0.203000)   SELECT * FROM relations
WHERE from_id = 19 and to_id = 1 LIMIT 1
  Person Load (0.219000)   SELECT * FROM people WHERE
id = 19 LIMIT 1
  Relation Load (0.203000)   SELECT * FROM relations
WHERE from_id = 9 and to_id = 1 LIMIT 1
  Person Load (0.234000)   SELECT * FROM people WHERE
id = 9 LIMIT 1
  Relation Load (0.297000)   SELECT * FROM relations
WHERE from_id = 10 and to_id = 1 LIMIT 1
  Person Load (0.203000)   SELECT * FROM people WHERE
id = 10 LIMIT 1
  Relation Load (0.203000)   SELECT * FROM relations
WHERE from_id = 11 and to_id = 1 LIMIT 1
  Person Load (0.219000)   SELECT * FROM people WHERE
id = 11 LIMIT 1
  Relation Load (0.219000)   SELECT * FROM relations
WHERE from_id = 8 and to_id = 1 LIMIT 1
  Person Load (0.219000)   SELECT * FROM people WHERE
id = 8 LIMIT 1
  Relation Load (0.203000)   SELECT * FROM relations
WHERE from_id = 12 and to_id = 1 LIMIT 1
  Person Load (0.234000)   SELECT * FROM people WHERE
id = 12 LIMIT 1
  Relation Load (0.281000)   SELECT * FROM relations
WHERE from_id = 13 and to_id = 1 LIMIT 1
  Person Load (0.219000)   SELECT * FROM people WHERE
id = 13 LIMIT 1
  Relation Load (0.203000)   SELECT * FROM relations
WHERE from_id = 14 and to_id = 1 LIMIT 1
  Person Load (0.219000)   SELECT * FROM people WHERE
id = 14 LIMIT 1
  Relation Load (0.250000)   SELECT * FROM relations
WHERE from_id = 16 and to_id = 1 LIMIT 1
  Person Load (0.203000)   SELECT * FROM people WHERE
id = 16 LIMIT 1
  Relation Load (0.281000)   SELECT * FROM relations
WHERE from_id = 17 and to_id = 1 LIMIT 1
  Person Load (0.297000)   SELECT * FROM people WHERE
id = 17 LIMIT 1
  Relation Load (0.203000)   SELECT * FROM relations
WHERE from_id = 18 and to_id = 1 LIMIT 1
  Person Load (0.234000)   SELECT * FROM people WHERE
id = 18 LIMIT 1
  Relation Load (0.860000)   SELECT * FROM relations
WHERE from_id = 23 and to_id = 1 LIMIT 1
  Person Load (0.250000)   SELECT * FROM people WHERE
id = 23 LIMIT 1
  Relation Load (0.218000)   SELECT * FROM relations
WHERE from_id = 20 and to_id = 1 LIMIT 1
  Person Load (1.719000)   SELECT * FROM people WHERE
id = 20 LIMIT 1
  Relation Load (0.203000)   SELECT * FROM relations
WHERE from_id = 24 and to_id = 1 LIMIT 1
  Person Load (0.219000)   SELECT * FROM people WHERE
id = 24 LIMIT 1
  Relation Load (0.734000)   SELECT * FROM relations
WHERE from_id = 26 and to_id = 1 LIMIT 1
  Person Load (0.125000)   SELECT * FROM people WHERE
id = 26 LIMIT 1
  Relation Load (0.110000)   SELECT * FROM relations
WHERE from_id = 27 and to_id = 1 LIMIT 1
  Person Load (0.140000)   SELECT * FROM people WHERE
id = 27 LIMIT 1
  Person Load (0.141000)   SELECT people.* FROM
people JOIN relations ON relations.to_id = people.id WHERE
relations.from_id = 1 AND relations.family != 'unrelated'
  Person Load (0.125000)   SELECT people.* FROM
people JOIN relations ON relations.to_id = people.id WHERE
relations.from_id = 1 AND relations.family != 'unrelated'
  Person Load (0.141000)   SELECT people.* FROM
people JOIN relations ON relations.to_id = people.id WHERE
relations.from_id = 1 AND relations.family != 'unrelated'
  Person Load (0.125000)   SELECT people.* FROM
people JOIN relations ON relations.to_id = people.id WHERE
relations.from_id = 1 AND relations.family != 'unrelated'
Rendering layouts/xhtml11common (200 OK)
  Fortune Count (0.140000)   SELECT COUNT(*) FROM fortunes 
  Fortune Load (0.500000)   SELECT * FROM fortunes
WHERE id = 7 LIMIT 1
  Fortune Columns (0.219000)   SHOW FIELDS FROM fortunes
Completed in 48.422000 (0 reqs/sec) | Rendering: 47.453000 (97%) | DB:
38.500000 (79%)

Queries are getting repeated all over the place, and I'm not sure
exactly what's causing all the repetition.  Most of these queries
aren't even pulling data that I'm even using.  What gives?
-- 
Bob Aman


More information about the Rails mailing list