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
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.