Mam tablice w której trzymam duże obiekty typu BLOB, każdy rekord jest przypisany do konta użytkownika który ma pewien limit czasu
Teraz chciałbym co jakiś czas puszczać zapytanie które będzie usuwać rekordy, które są przeterminowane
Powiedzmy że schemat tabel jest taki
Użytkownicy
id | data_waznosci |
---|---|
1 | 8/06/2013 |
2 | 9/06/2013 |
Duże_obiekty
id | id_uzytkownika | blob1 | blob2 | text |
---|---|---|---|---|
100 | 1 | ... | ... | ... |
105 | 1 | ... | ... | ... |
124 | 2 | ... | ... | ... |
Pytanie - czy opłaca się tworzyć trzecią tablicę wiążącą Duże_obiekty
z Użytkownikami
? W stylu:
Powiązanie
id_uzytkownika | id_duzego_obiektu |
---|---|
1 | 100 |
1 | 105 |
2 | 124 |
Czy może to przyspieszyć wyłuskiwanie elementów do usunięcia, czy wystarczy indeks na id_uzytkownika
?
Powiedzmy że w pierwszym przypadku miałbym zapytanie:
DELETE Duże_obiekty FROM Duże_obiekty LEFT JOIN Użytkownicy ON Duże_obiekty.id_uzytkownika = Użytkownicy.id WHERE data_waznosci < aktualna_data
a w drugim coś w stylu:
DELETE FROM Duże_obiekty WHERE id IN (SELECT id_duzego_obiektu FROM Powiązanie LEFT JOIN Użytkownicy ON Powiązanie.id_uzytkownika = Użytkownicy.id WHERE data_waznosci < aktualna_data)
z tabeli Powiązanie
automatycznie by się usuwały rekordy bo klucz obcy byłby ustawiony na CASCADE ON DELETE
Możliwe że piszę bzdury bo o tej porze ciężko z myśleniem ;)