Efter min mening vil WHERE-klausulen være langsom på grund af den involverede matematik, og brugen af funktioner i WHERE-klausulen vil forhindre databasen i at bruge et indeks til at fremskynde forespørgslen - så i virkeligheden vil du undersøge hver restaurant i database, og udfør den store cirkel-matematik på hver række, hver gang du laver en forespørgsel.
Personligt ville jeg beregne TopLeft og BottomRight koordinaterne for en firkant (som kun skal beregnes groft ved hjælp af pythagoras) med sider svarende til det område, du leder efter, og derefter udføre den mere komplicerede WHERE-sætningstest på den mindre delmængde af poster, der er inden for den Lat/Long firkant.
Med et indeks på Lat &Long i databasen forespørgslen
WHERE MyLat >= @MinLat AND MyLat <= @MaxLat AND MyLong >= @MinLong AND MyLong <= @MaxLong
bør være meget effektiv
(Bemærk venligst, at jeg ikke har noget kendskab til MySQL specifikt, kun til MS SQL)