Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] kasowanie wpisow z jednej tabeli na podstawie drugiej
maly_swd
post 20.02.2010, 11:00:10
Post #1





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


Witam.
Macie jakis pomysl jak mozna skasowac z jednej tabeli (zawiera 20mln rekordow) wpisy ktorych id sa w drugiej tabeli okolo 6mln wpisow.
Tabele sa typu MEMORY z indexem na ID.
Zapytanie jakiego uzywam trwa wiecznosc (okolo 10 minut) na 2x 4 rdzeniowych prockach 2.8GHz
  1. DELETE FROM tabela_1 WHERE id IN (SELECT id FROM tabela_2)


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
Mchl
post 20.02.2010, 11:05:23
Post #2





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Kod
DELETE tabela_1 FROM tabela_1 CROSS JOIN tabela_2 USING (id)
Go to the top of the page
+Quote Post
maly_swd
post 22.02.2010, 10:21:51
Post #3





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


niestety dalej wolno ... ma ktos inny pomysl?


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
Mchl
post 22.02.2010, 14:48:15
Post #4





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


A te tabel przynajmniej mieszczą Ci się w pamięci w całości?
Go to the top of the page
+Quote Post
phpion
post 22.02.2010, 14:52:32
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Może spróbuj z EXISTS?
  1. DELETE FROM tabela_1 WHERE EXISTS (SELECT id FROM tabela_2 WHERE tabela_1.id = tabela_2.id)
Go to the top of the page
+Quote Post
Mchl
post 22.02.2010, 15:45:01
Post #6





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


A teraz policz ile razy wykona się podzapytanie w tym zapytaniu.
Go to the top of the page
+Quote Post
phpion
post 22.02.2010, 15:54:47
Post #7





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




A teraz zobacz, że kolega szuka alternatywy dla swojego zapytania. Może zamiast dogryzać podałbyś lepsze rozwiązanie?
Go to the top of the page
+Quote Post
Mchl
post 22.02.2010, 16:14:29
Post #8





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Nie dogryzam. Krytykuję, a to nie to samo tongue.gif

Pytam czy tabele mieszczą się w całości w pamięci, bo jeśli nie, to MySQL zrzuca je na dysk w postaci MyISAM, ale z indeksem typu HASH, który do takiego usuwania nadaje się raczej średnio.
Go to the top of the page
+Quote Post
maly_swd
post 22.02.2010, 16:54:06
Post #9





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


Nie wiem o co dokladnie pytasz:)
Wiec napisze tak:
Tabele typu MEMORY - 1 GB , i okolo 200MB druga
Pamiec na serwerze 48GB
Przydzial pamieci na tabele MEMORY 8GB

Teraz jesli mozesz to prosze o wytlumaczenie co w my.ini odpowiada za przetworzenie tego w pamieci:). Pamiec na serwerze moge maxymalnei do 64GB ustawic wiec damy rade.. tylko pytanie CO I JAK:) bo juz mi sie pomysly koncza.


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
Mchl
post 22.02.2010, 17:10:47
Post #10





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Spróbuj na początek ustawić im indeks BTREE.

Cytat(Mchl @ 22.02.2010, 16:14:29 ) *
Nie dogryzam. Krytykuję, a to nie to samo tongue.gif

Pytam czy tabele mieszczą się w całości w pamięci, bo jeśli nie, to MySQL zrzuca je na dysk w postaci MyISAM, ale z indeksem typu HASH, który do takiego usuwania nadaje się raczej średnio.


Bleh. Ale bzdurę napisałem. To dotyczy tylko tymczasowych tabel tworzonych wewnętrzenie przez MySQL (które też są typu MEMORY).

Cytat
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 18:40