Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Optymalizacja mysql dla API
Forum PHP.pl > Forum > PHP
maksik
Mam pytanie z serii optymalizacji bazy danych. Posiadam tabele o nazwie "coordinates" zawiera ona 4 kolumny. Poniżej przykładowe zestawienie

  1. id - lat - long - city
  2. 1 - 50.202312 - 20.012312 - Warszawa
  3. 2 - 51.104332 - 21.012312 - Wrocław
  4. 3 - 48.203355 - 21.012312 - Włoszczowa
  5. 4 - 49.203352 - 19.012312 - Michałowice


Łącznie zawiera ona 30 000 000 rekordów.

API wywołuje takie zapytanie, aby na podstawie danych lat, long znaleźć parametr "city"

  1. $_GET['lat']=50.3424;
  2. $_GET['long']=20.2414;
  3. $query = mysql_query("SELECT city FROM coordinates WHERE lat LIKE '".$_GET['lat']."%' and long LIKE '".$_GET['long']."%'");


Teraz pytania:
1 Czy taka ilość powinna być rozdzielona na kilka tabeli?
2 Czy można, a może powinno się zastosować indeks?
3 Czy stosuje się jakieś zasady optymalizacji przy takim zapytaniu?
kpt_lucek
1. nie
2. index na lat/long raczej wymagany, zwłaszcza że nie robisz insertów (zakładam)
3. LIKE ogólnie boli

--

Zinteresuj się Solr/ElasticSearch/inne, bardzo fajne mechanizmy które mają bardzo fajne funkcje pozwalające na osiągnięcie tego co chcesz, w czasie o niebo mniejszym

--EDIT
ElasticSearch
Solr
Pyton_000
3. W takim przykładzie nie będzie bolało bo jest u żyte dopasowanie końca ciągu czyli
LIKE "xxx%"

A taki zapis spowoduje użycie indeksu.
phpion
Tylko, że zapisywanie współrzednych w polach tekstowych i szukanie LIKE to dość nowatorskie rozwiązanie smile.gif
Pyton_000
No cóż biggrin.gif Nasz klient nasz Pan.

Można trzymać też w Decimal 10,6 albo w polu Point z rozszerzenia do MySQL: https://dev.mysql.com/doc/refman/5.7/en/spa...extensions.html
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.