[MySQL] optymalizacja prostej bazy, czy wszystko wrzucić do jednej tabeli, czy rozbić? |
[MySQL] optymalizacja prostej bazy, czy wszystko wrzucić do jednej tabeli, czy rozbić? |
17.09.2019, 15:11:10
Post
#1
|
|
Grupa: Zarejestrowani Postów: 157 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
|
|
|
17.09.2019, 21:46:15
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 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. -------------------- |
|
|
17.09.2019, 22:06:00
Post
#3
|
|
Grupa: Zarejestrowani Postów: 157 Pomógł: 5 Dołączył: 3.03.2004 Ostrzeżenie: (0%) |
50MB to ile wierszy? Około 200 tysięcy wierszy. 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. -------------------- Kliknij na "POMÓGŁ", by poprawić mi samopoczucie :D
|
|
|
26.09.2019, 11:04:31
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 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ć. -------------------- |
|
|
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
|
|
|
Wersja Lo-Fi | Aktualny czas: 25.04.2024 - 18:37 |