Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] optymalizacja prostej bazy
Forum PHP.pl > Forum > Przedszkole
simperium
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


vokiel
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.
simperium
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
vokiel
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ć.
genko
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
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.