Tom: Performanceproblem Umkreissuche

Beitrag lesen

Hello,

SELECT SQL_CALC_FOUND_ROWS users.*, dest.latitude, dest.longitude, ACOS(
             SIN(RADIANS(src.latitude)) * SIN(RADIANS(dest.latitude))
             + COS(RADIANS(src.latitude)) * COS(RADIANS(dest.latitude))
             * COS(RADIANS(src.longitude) - RADIANS(dest.longitude))
        ) * 6380 AS distance,  FROM users LEFT JOIN postalcodes_de src ON (src.postalcode='01855' AND src.placename='Sebnitz') LEFT JOIN postalcodes_de dest ON (dest.postalcode=users.zip AND dest.placename=users.city) WHERE CONCAT(users.zip,users.city) IN (
                                    SELECT CONCAT(dest.postalcode,dest.placename)  FROM postalcodes_de dest
                                    LEFT JOIN postalcodes_de src ON (src.postalcode='01855' AND src.placename='Sebnitz')
                                     WHERE (ACOS(
                                     SIN(RADIANS(src.latitude)) * SIN(RADIANS(dest.latitude))
                                     + COS(RADIANS(src.latitude)) * COS(RADIANS(dest.latitude))
                                     * COS(RADIANS(src.longitude) - RADIANS(dest.longitude))
                                     ) * 6380 ) <=20)  ORDER BY  distance  ASC LIMIT 0,4


>   
> Dies ist der Ansatz einer Umkreissuche. Leider dauert die IN-Clause unverhältnismäßig lange.  
  
Wenn Du so frech wärst, und anstelle eines Kreises ein Quadrat absuchen würdest, könntest Du BETWEEN verwenden und es ginge bestimmt schneller.  
  
  
  
  
Liebe Grüße aus dem schönen Oberharz  
  
  
Tom vom Berg  
![](http://selfhtml.bitworks.de/Virencheck.gif)  
  

-- 
 ☻\_  
/▌  
/ \ Nur selber lernen macht schlau  
<http://bikers-lodge.com>