Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> skomplikowane zapytanie - optymalizacja, optymalizacja zapytania, jak sformułować zapytanie
zazdrosny17
post 2.03.2016, 10:00:31
Post #1





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 24.07.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Crozin
post 2.03.2016, 11:43:20
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Crozin 2.03.2016, 11:51:25
Go to the top of the page
+Quote Post
zazdrosny17
post 2.03.2016, 13:25:58
Post #3





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 24.07.2010

Ostrzeżenie: (0%)
-----


dzięki za odpowiedź
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 11:29