Mam dużą tabelę MySQL (~ 10 milionów wierszy, 6.5G), które używam do odczytu & write. To MyISAM, i otrzymuję wiele blokad ze względu na blokadę stołu MyISAM podczas pisania.InnoDB vs. czas wprowadzania zapytania MyISAM
Postanowiłem spróbować przejść do InnoDB, który jest zalecany dla tabel do odczytu/zapisu, i blokuje tylko określone wiersze podczas zapisywania.
Po konwersji przetestowałem instrukcje wstawiania i okazuje się, że zajmuje to około 15 razy więcej (od 0,1 sekundy do 1,5 sekundy) w tabeli InnoDB niż w tabeli MyISAM. Dlaczego?
Nie skonfigurowałem jeszcze niczego dla InnoDB i planuję dodać również partycje, ale ta liczba jest dla mnie wciąż nieoczekiwana. Oczywiście tabele są takie same, te same indeksy itp
Dodatkowe informacje zgodnie z życzeniem:
2 indeksy. primary to data_id typu Big INT, a nie unikatowy id_użytkownika typu varchar (255).
Wkładki mają ~ 150 wierszy, które mają ten sam identyfikator użytkownika.
Rozmiar indeksów: 200 MB w MyISAM, InnoDB w 400MB
Czy możesz pokazać nam indeksy? Jest to najbardziej prawdopodobna przyczyna długich czasów wstawiania. – wallyk
Mam 2 indeksy, id_danych, który jest kluczem podstawowym, i identyfikator użytkownika, który nie jest unikalny. Moje wstawki mają ~ 150 wierszy, które mają ten sam identyfikator użytkownika (który ma indeks). – normalppl
, ale jaka jest zawartość każdego indeksu? Jeśli jest kilka pęknięć, to na pewno trudno będzie indeksować. Ale jeśli są to liczby całkowite lub inne trywialne, to trudniej jest zrozumieć, dlaczego wydajność byłaby zła. – wallyk