2012-05-30 19 views
6

Wieczorem30 milionów wierszy w MySQL

Idę przez długi proces importowania danych z poobijany, 15-letni, tylko do odczytu formatu danych do MySQL zbudować kilka mniejszych tabel statystycznych z nim .

Największa tablica, którą zbudowałem wcześniej, była (jak sądzę) 32 miliony wierszy, ale nie spodziewałem się, że osiągnie tak dużą wartość i naprawdę nadweręży MySQL.

tabela będzie wyglądać następująco:

surname name year rel bco bplace rco rplace 
Jones  David 1812 head Lond Soho  Shop Shewsbury 

Więc małe ints i varchars.

Czy ktokolwiek może zaoferować porady, jak szybko uzyskać to w pracy? Czy indeksy któregoś z coulmnów pomogłyby, czy po prostu spowolniłyby zapytania.

Duża część danych w każdej kolumnie będzie wielokrotnie powielana. Niektóre pola mają nie więcej niż około 100 różnych możliwych wartości.

Głównymi kolumnami, które będę sprawdzać w tabeli są: nazwisko, imię, rco, miejsce.

+2

Indeksy przyspieszają pobieranie danych i spowalnianie wstawiania danych. Ogólnie rzecz biorąc, są one bardzo dobre: ​​proponuję je utworzyć dla każdej z kolumn, w których możesz przesłać zapytanie do tabeli. – eggyal

+3

30 milionów wierszy to niewiele dla nowoczesnego RDBMS. O ile oczywiście nie wykonujesz pełnych skanów tabel bez indeksów, oczywiście. –

+0

Dzięki za komentarz. Myślę, że to był jeden z problemów z moim 32 mil. tabela wierszy. Wstawianie wierszy powodowało awarie. –

Odpowiedz

5

INDEX w kolumnie służy do wyszukiwania. Spróbuj użyć kolumn, których często używasz w zapytaniach. Jak już wspomniano, używałbyś kolumn surname, name, rco, rplace. Proponuję je zindeksować.

Ponieważ tabela ma 32 miliony rekordów, indeksowanie zajmie trochę czasu, ale warto poczekać.

+0

Dzięki. Właśnie buduję teraz stół. Mogę więc zbudować indeksy na insercie, a nie na c. 30 mil wierszy. –

+1

@KohjahBreese: Sprawdź obie strony, może się okazać, że utworzenie indeksu * raz * w 30 milionach wierszy jest szybsze niż budowanie indeksu narastająco. –