Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] kasowanie wpisow z jednej tabeli na podstawie drugiej
Forum PHP.pl > Forum > Bazy danych > MySQL
maly_swd
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)
Mchl
Kod
DELETE tabela_1 FROM tabela_1 CROSS JOIN tabela_2 USING (id)
maly_swd
niestety dalej wolno ... ma ktos inny pomysl?
Mchl
A te tabel przynajmniej mieszczą Ci się w pamięci w całości?
phpion
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)
Mchl
A teraz policz ile razy wykona się podzapytanie w tym zapytaniu.
phpion
A teraz zobacz, że kolega szuka alternatywy dla swojego zapytania. Może zamiast dogryzać podałbyś lepsze rozwiązanie?
Mchl
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.
maly_swd
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.
Mchl
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
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.