Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Update z dwóch tabel - czas
Forum PHP.pl > Forum > Bazy danych > MySQL
czaq
1 tabela: tab_gl:

+-------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+-------+
| IdCzesci | varchar(20) | NO | MUL | NULL | |
| SKU | varchar(20) | NO | | NULL | |
| Nazwa | varchar(50) | NO | | NULL | |
| N | varchar(50) | NO | | NULL | |
| MarkaPolaczone | varchar(50) | NO | | NULL | |
| Marka | varchar(50) | NO | | NULL | |
| Model | varchar(50) | NO | | NULL | |
| PrzodTyl | varchar(50) | NO | | NULL | |
| PT | varchar(50) | NO | | NULL | |
| LewaPrawa | varchar(50) | NO | | NULL | |
| OkresZastosowania | varchar(50) | NO | | NULL | |
| Producent | varchar(50) | NO | | NULL | |
| Podmodel | varchar(50) | NO | | NULL | |
| Informacjeop | varchar(100) | NO | | NULL | |
| Cena | float | NO | | NULL | |
+-------------------+--------------+------+-----+---------+-------+


2 tabela: ceny:
mysql> show columns from ceny;
+----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| IdCzesci | int(20) | NO | MUL | NULL | |
| Cena | float | NO | | NULL | |
+----------+---------+------+-----+---------+-------+
2 rows in set (0,00 sec)


kat_gl zawiera ok 60000 rekordów, a ceny ok 120000 rekordów

Chce uaktualnić ceny po polu IdCzesci (część wspólna)
Zapytanie:
  1. UPDATE `kat_gl`,`ceny`
  2. SET `kat_gl`.`Cena`=`ceny`.`cena`
  3. WHERE `kat_gl`.`IdCzesci` |

Wykonuje się już dwie godziny i nadal trwa ze statusem: Sending data
Czy to możliwe że trwa to tak długo ? Co w przypadku gdy zwiększy mi się liczba rekordów dwukrotnie ? A może złe zapytanie ?

nospor
yyyy.... a to:
WHERE `kat_gl`.`IdCzesci`
to niby co wg. ciebie ma robić? Bo teraz panie kolego właśnie zajeżdzasz baze na śmierc smile.gif (60000*120000 = całkiem sporo smile.gif)
Sephirus
2 godziny? Trochę za dużo...

Już szybciej chyba wykona Ci się po prostu:

  1. UPDATE kat_gl SET Cena = (SELECT cena FROM ceny WHERE IdCzesci = kat_gl.IdCzesci);


Ale ... tak w ogóle to po co to robisz? Przecież możesz dla danej części cenę pobierać z tabeli cena a nie z tabeli kat_gl... To jest dublowanie danych :/
nospor
Cytat
2 godziny? Trochę za dużo...
Zrobił iloczyn kartezjański to ma długo. W where powinien połączyć obie tabele po polu a nie dać nic nie robiący warunek
czaq
Właśnie o to chodzi że docelowo wszystkie dane muszę mieć w jednym pliku, dopiero jak zaimportuję wszystko będę mógł się bawić inaczej. Dziękuję smile.gif
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.