The simplified scene: select slowfunction() from a order by b limit 1 is slow than select slowfunction() from ( select * from a order by b limit 1) if there are many records in table 'a' The real scene: function ST_Distance_Sphere is slow than ST_Distance, the query: SELECT ST_Distance_Sphere(s, ST_GeomFromText('POINT(1 1)')) from road order by ST_Distance(s, ST_GeomFromText('POINT(1 1)')) limit 1 is slow than: select ST_Distance_Sphere(s, ST_GeomFromText('POINT(1 1)')) from (SELECT s from road order by ST_Distance(s, ST_GeomFromText('POINT(1 1)')) limit 1) as a There are about 7000 records in 'road'.