Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak przyśpieszyć update
Forum PHP.pl > Forum > Bazy danych > MySQL
borpaw
Mam tabele która ma kilka milionów rekordów, wykonanie na niej najprostsze UPDATE zajmóje około 20 sek

Sama tabela ma około 30 kolumn, to też ma wpływ na czas wykonania.

Czy można coś zrobić żeby było szybciej? Czy może najlepiej rozbić tabele na mniejsze w sensie liczby kolumn?
gothye
może na początku pokaż strukturę tabeli i zapytanie jakim wykonujesz update
borpaw
Proszę bardzo, tabela:

  1. CREATE TABLE `data` (
  2. `id` int(100) NOT NULL AUTO_INCREMENT,
  3. `pole_1` varchar(100) NOT NULL,
  4. `pole_2` varchar(100) NOT NULL,
  5. `pole_3` varchar(100) NOT NULL,
  6. `pole_4` varchar(100) NOT NULL,
  7. `pole_5` varchar(100) NOT NULL,
  8. `pole_6` varchar(100) NOT NULL,
  9. `pole_7` varchar(100) NOT NULL,
  10. `pole_8` int(11) NOT NULL,
  11. `pole_9` int(11) NOT NULL,
  12. `pole_10` int(11) NOT NULL,
  13. `pole_11` int(11) NOT NULL,
  14. `pole_12` varchar(100) NOT NULL,
  15. `pole_13` varchar(100) NOT NULL,
  16. `pole_14` varchar(100) NOT NULL,
  17. `pole_15` int(11) NOT NULL,
  18. `pole_16` int(11) NOT NULL,
  19. `pole_17` int(11) NOT NULL,
  20. `pole_18` varchar(100) NOT NULL,
  21. `pole_19` varchar(100) NOT NULL,
  22. `pole_20` varchar(100) NOT NULL,
  23. `pole_21` int(11) NOT NULL,
  24. `pole_22` int(11) NOT NULL,
  25. PRIMARY KEY (`id`)
  26. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;


  1. UPDATE DATA SET pole_1='test'
rocktech.pl
Witam.

  1. ALTER TABLE `data` ENGINE=INNODB;
borpaw
Zmieniłem na InnoDB i jest znacznie gorzej.

Chyba nic poza rozbiciem na mniejsze tabele nie pozostaje, co myślicie?
sazian
no niestety ale aktualizacja kilku milionów rekordów musi trochę trwać
bpskiba
Zapytam o serwer.
Myślę, że chodzi na słabej maszynie lub na domyślnej konfiguracji. Kilka milionów rekordów to dużo, ale czas rzędu 20s to przesada. Odpalałeś skrypty do optymalzacji??
borpaw
nie odpalałem a co dokładnie trzeba zrobić?
bpskiba
Mysql wymaga ręcznej konfiguracji wielkości buforów pamięci w pliku konfiguracyjnym.
Domyślna konfiguracja jest wystarczająca dla małych baz danych i słabych maszyn. Wykorzystuje ona jednak małą część dostępnej pamięci RAM komputera. Dla operacji na dużych bazach to nie wystarcza, więc silnik MySQL wczytuje dane "na raty" i tworzy bufor na dysku. Skutkuje to kotastrofalnym spadkiem wydajności.
Zrozumienie funkcji poszczagólnych buforów nie jest łatwe, ale istnieją skrypty podpowiadające co zrobić. Poniżej jeden z nich

http://www.techerator.com/2011/08/optimize...l-tuner-script/
rocktech.pl
Wykonujesz UPDATE zapewne z klauzulą WHERE? Tabela ma tylko jeden indeks id. Sprawdź czy przy zapytaniu jest wykorzystywany.
Jeśli wykonujesz UPDATE na milionach rekordów to będzie to trwało dłuuugo.

Zerknij jeszcze na PROCEDURE ANALYSE

  1. SELECT * FROM `data` PROCEDURE ANALYSE(10000, 2000);
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.