Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Optymalizacja mysql dla API
maksik
post 24.09.2016, 14:16:54
Post #1





Grupa: Zarejestrowani
Postów: 206
Pomógł: 0
Dołączył: 26.09.2012

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


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?

Ten post edytował maksik 24.09.2016, 14:17:25
Go to the top of the page
+Quote Post
kpt_lucek
post 24.09.2016, 14:36:43
Post #2





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

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


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

Ten post edytował kpt_lucek 24.09.2016, 14:43:18


--------------------


Cytat
There is a Bundle for that
Lukas Kahwe Smith - October 31th, 2014
Go to the top of the page
+Quote Post
Pyton_000
post 24.09.2016, 14:53:59
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


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.
Go to the top of the page
+Quote Post
phpion
post 24.09.2016, 20:03:15
Post #4





Grupa: Moderatorzy
Postów: 6 070
Pomógł: 860
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Tylko, że zapisywanie współrzednych w polach tekstowych i szukanie LIKE to dość nowatorskie rozwiązanie smile.gif
Go to the top of the page
+Quote Post
Pyton_000
post 24.09.2016, 20:15:47
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


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
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: 27.04.2024 - 03:06