Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: skomplikowane zapytanie - optymalizacja
Forum PHP.pl > Forum > PHP
zazdrosny17
Witam,

Mam takie zapytanie:

$q1 = "SELECT *, ( 3959 * acos( cos( radians(" . $lat . ") ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(" . $long . ") ) + sin( radians(" . $lat . ") ) * sin( radians( lat ) ) ) ) AS distance FROM sklep HAVING distance < $km and `status`=1 and `wielkosc`=5 ORDER BY datadodania DESC Limit 5";

I teraz chciałbym je trochę odwrócić, tzn żeby najpierw sprawdzić status i wielkość, a dopiero później odległość między punktami, ale totalnie nie wiem gdzie wkleić wyżej pogrubiony tekst.

$q1 = "select * from sklep where(status=1 and wielkosc=5) ORDER BY datadodania DESC Limit 5";

Bardzo proszę o pomoc
Crozin
Kolejność wykonywania działań i tak będzie taka jakbyś tego chciał, tj. baza danych najpierw musi w ogóle zakwalifikować rekord do puli zwracanych (klauzura WHERE), następnie przygotuje sobie dane (klauzura SELECT) by na samym końcu jeszcze sprawdzić ostatecznie czy rekord pasje (klauzura HAVING).
Jeżeli chodzi o optymalizację to przede wszystkim możesz od razu walić małym kosztem te rekordy, są poza "kwadratowym" obszarem wyszukiwania. Wyliczasz sobie jakie są maksymalne i minimalne wartości szerokości i długości geograficznej i odrzucasz je na poziomie klauzuli WHERE. Dzięki temu nie musisz wyliczać odległości dla każdego rekordu, tylko dla małej części, która znajduje się na obszarze kwadratu opisanego na kole reprezentującym docelowe kryteria położenia geograficznego.
zazdrosny17
dzięki za odpowiedź
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.