Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] optymalizacja prostej bazy, czy wszystko wrzucić do jednej tabeli, czy rozbić?
simperium
post 17.09.2019, 15:11:10
Post #1





Grupa: Zarejestrowani
Postów: 156
Pomógł: 5
Dołączył: 3.03.2004

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


Witam, mam takie bardzo przedszkolne pytanie dot. trochę optymalizacji.
Mam plik tekstowy z danymi w plain text, który waży ok 50MB. Jest to tabela mniej więcej taka:

Cytat
województwo,miasto, imię, nazwisko, inne różne dane:
mazowieckie,Warszawa,Jeż,Tuptuś,blabla


Czy z perspektywy szybkości obsługi takiej tabeli, lepiej jest wywalić województwa i miasta do osobnych tabel MySQL, czy zostawić jak jest? Tabela będzie tylko do odczytu, nic się nie będzie w niej zmieniało, to dane statyczne, nic nie będzie się rozrastało, ani kurczyło, więc jedyne co chcę osiągnąć to szybki odczyt danych.

Czyli. Czy szybciej i mniej obciążająco serwer będzie takie rozwiązanie:

Cytat
[tabela1]
województwo,miasto, imię, nazwisko, inne różne dane:
mazowieckie,Warszawa,Jeż,Tuptuś,blabla


Czy takie
Cytat
[tabela1: województwa]
ID-A,województwo1

[tabela2: miasta]
ID-1,miasto1

[tabela3: wszystko + dowiązania]
ID województwa, ID miasta, imię, nazwisko, blabla




--------------------
Kliknij na "POMÓGŁ", by poprawić mi samopoczucie :D
Go to the top of the page
+Quote Post
vokiel
post 17.09.2019, 21:46:15
Post #2





Grupa: Zarejestrowani
Postów: 2 437
Pomógł: 413
Dołączył: 12.03.2007

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


50MB to ile wierszy?

Co ważniejsze to jak będziesz z tych danych korzystał na przyszłość. Jeśli już wiesz jakie wyniki będziesz chciał otrzymać to pod te wyniki rób strukturę bazy. Bo nie zawsze normalizacja sprzyja szybkości.


--------------------
Go to the top of the page
+Quote Post
simperium
post 17.09.2019, 22:06:00
Post #3





Grupa: Zarejestrowani
Postów: 156
Pomógł: 5
Dołączył: 3.03.2004

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


Cytat(vokiel @ 17.09.2019, 22:46:15 ) *
50MB to ile wierszy?

Około 200 tysięcy wierszy.

Cytat(vokiel @ 17.09.2019, 22:46:15 ) *
Co ważniejsze to jak będziesz z tych danych korzystał na przyszłość.

Z danych będzie się korzystało przez 3-4 miesiące. Dane nie będą ulegały zmianie - prawdopodobnie zostaną po tym czasie całkowicie usunięte i zostaną zaimportowane inne, ale metoda działania podobna.

Cytat
Jeśli już wiesz jakie wyniki będziesz chciał otrzymać to pod te wyniki rób strukturę bazy. Bo nie zawsze normalizacja sprzyja szybkości.

To będzie bardzo proste: szukajka po mieście, szukajka po nazwisku, wyświetlenie wszystkich danych z wiersza tabeli. Nic więcej, MySQL będzie dostawał łącznie 3-4 różne zapytania. Ważne, by był w stanie sprawnie reagować.

Pytanie, czy serwer jakoś specjalnie odczuje różnicę pracy na pliku o takiej wadze, gdy dane rozbite na strukturę lub gdy w jednej tabelce. smile.gif


--------------------
Kliknij na "POMÓGŁ", by poprawić mi samopoczucie :D
Go to the top of the page
+Quote Post
vokiel
post 26.09.2019, 11:04:31
Post #4





Grupa: Zarejestrowani
Postów: 2 437
Pomógł: 413
Dołączył: 12.03.2007

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


200k wierszy to tyle co nic, spokojnie nawet na najsłabszej maszynie MySQL to pociągnie.

Jako, że planujesz pobierać całość wierszy to IMHO nie ma sensu rozbijać tego na mniejsze tabele, możesz wrzucić do jednej. Ustaw tylko dobrze klucze po tych kolumnach, po których będziesz wyszukiwać/agregować.


--------------------
Go to the top of the page
+Quote Post
genko
post 26.09.2019, 12:40:22
Post #5





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 26.09.2019

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


Jeśli masz pewność, że w nazwach miast i województw nie ma błędów, wlej wszystko do jednej tabeli. Ale może zdarzyć się sytuacja, gdy jedna osoba mieszka w mieście "Wrocław", a inna w mieście "Wroclaw", chociaż jest to jedno i to samo miasto. Musisz sprawdzić dane przed wlewem
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: 18.10.2019 - 02:54