Comment 6 for bug 618356

Revision history for this message
Robert Collins (lifeless) wrote : Re: Person-picker takes a very long time consistently

Digging in - SELECT id
                FROM
                  (SELECT Person.id, 100 AS rank
                   FROM Person
                   WHERE name = 'david.wonderly'
                   UNION ALL SELECT Person.id, rank(fti, ftq('david.wonderly'))
                   FROM Person
                   WHERE Person.fti @@ ftq('david.wonderly')
                   UNION ALL SELECT Person.id, 10 AS rank
                   FROM Person, IrcId
                   WHERE IrcId.person = Person.id
                     AND LOWER(IrcId.nickname) = 'david.wonderly'
                   UNION ALL SELECT Person.id, 1 AS rank
                   FROM Person, EmailAddress
                   WHERE EmailAddress.person = Person.id
                     AND LOWER(email) LIKE 'david.wonderly' || '%%'
                     AND EmailAddress.status IN (2, 4)) AS public_subquery
                ORDER BY rank DESC LIMIT 100;
   id
---------
 3020039
 3020039
 3020039
(3 rows)

Time: 1149.682 ms

taking out sections:

 SELECT id
                FROM
                  (SELECT Person.id, rank(fti, ftq('david.wonderly'))
                   FROM Person
                   WHERE Person.fti @@ ftq('david.wonderly')
                   UNION ALL SELECT Person.id, 10 AS rank
                   FROM Person, IrcId
                   WHERE IrcId.person = Person.id
                     AND LOWER(IrcId.nickname) = 'david.wonderly'
                   UNION ALL SELECT Person.id, 1 AS rank
                   FROM Person, EmailAddress
                   WHERE EmailAddress.person = Person.id
                     AND LOWER(email) LIKE 'david.wonderly' || '%%'
                     AND EmailAddress.status IN (2, 4)) AS public_subquery
                ORDER BY rank DESC LIMIT 100;
1135ms

SELECT id
                FROM
                  (SELECT Person.id, 10 AS rank
                   FROM Person, IrcId
                   WHERE IrcId.person = Person.id
                     AND LOWER(IrcId.nickname) = 'david.wonderly'
                   UNION ALL SELECT Person.id, 1 AS rank
                   FROM Person, EmailAddress
                   WHERE EmailAddress.person = Person.id
                     AND LOWER(email) LIKE 'david.wonderly' || '%%'
                     AND EmailAddress.status IN (2, 4)) AS public_subquery
                ORDER BY rank DESC LIMIT 100;
Time: 30.087 ms

So its the fti lookup.