[MySQL] optymalizacja update'a z csv

Odpowiedz Nowy wątek
2019-06-11 08:39
0

Cześć
Od paru dni walczę z bardzo wolnym updatem w MySQL.
Temat wygląda następująco.
Mam listę asortymentu w pliku csv kolumny to kod_towaru, jakiś tam opis, ilość itd.
Wrzucam to do tabeli csv_tmp.
Następnie chce zrobić update na tabeli 1_towary w której zmieniam pole siAKT na podstawie ilości z csv_tmp oraz stan z tabeli 1_magazyny_stany.

Przybliżona ilość rekordów w każdej tabeli:
csv_tmp ~ 12k
1_towary ~25k
1_magazyny_stany ~50k

Zapytanie wygląda następująco (piszę z pamięci może być jakiś drobny błąd)

Update `1_towary` t 
INNER JOIN  `1_magazyny_stany` m on m.id_towaru = t.id 
INNER JOIN `csv_tmp` c on c.v1 = t.kod_towaru
Set t.data_modyfikacji = NOW(),
Set siAkt = select CASE
                  WHEN m.stan = 0 and c.v3 = 0
                     THEN 0
                  ELSE 1
       END 

Zapytanie wykonuje testowo na zwykłym laptopie i XAMPP, i na chwilę obecną wykonuje się ok. 6000s.
Moje pytanie brzmi czy idzie to jakoś zoptymalizować, czy testować od razu na środowisku serwerowym?

Ps. Próbowałem również stworzyć widok dane z

select CASE
                  WHEN m.stan = 0 and c.v3 = 0
                     THEN 0
                  ELSE 1
       END as aktywnosc, t.kod_towaru,t.siAkt,m.stan,c.v3 

 from `1_towary` t
 inner join `1_magazyny_stany` m on m.id_towaru = t.id 
 inner join `csv_tmp` c on c.v1 = t.kod_towaru

i pisać zapytanie w ten sposób:
Update `1_towary` t 
INNER join d on t.kod_towaru = d.kod_towaru
SET t.data_modyfikacji = NOW(),
SET siAKt = d.aktywnosc

ale powyższy sposób wykonuje się w podobnym czasie

PS2. Próbowałem zmieniać ustawienia lokalnego mysql m.in ilość wykorzystywanej pamięci, rozmiar bufora itd ale nie przyniosło to oczekiwanego efektu.

edytowany 1x, ostatnio: Langol, 2019-06-11 08:40

Pozostało 580 znaków

2019-06-11 08:46
0

Czy csv_tmp.v1 co 1_towary.kod_towaru?

Pozostało 580 znaków

2019-06-11 09:07
0

@Langol: odpowiadaj w postach, v1 jest indeksowana?

Pozostało 580 znaków

2019-06-11 09:10
0

@panczo v1 nie, robiłem indeks na kod_towaru w przypadku robienia update'a z widoku dane.

Pozostało 580 znaków

2019-06-11 09:10

To zaczołbym od indeksu na v1, to powinno przyspieszyć join-a

Pozostało 580 znaków

2019-06-11 09:11
0

@Panczo:

Ok sprawdzę i dam znać, dzięki.

UPDATE:
Niestety stworzenie indeksu na v1 nie przyśpieszyło za bardzo update'a. Jakieś inne pomysły? ;)

edytowany 2x, ostatnio: Langol, 2019-06-13 15:41

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0