Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: optymalizacja -delete + insert czy update
Forum PHP.pl > Forum > Bazy danych > MySQL
cyberpooh
witam
Załóżmy sytuację, uzytkownik ma do zaznaczenia zmienną, dużą liczbę checkboxów(np 20-30)
Uzytkownikow pare tysięcy, formularzy skladanych 500-1000 na godzine.

MySQL 5.6, baza na innodb

dane zapiszemy w tabeli

id_usera | id_checkboxa | zaznaczyl (0/1)

mamy index na id_usera

Co z punktu widzenia wydajnosci będzie szybsze w momencie zapisania formularza?

1.
Wyczyszczenie tabeli z poprzenich odpowiedzi (delete * from where id usera)
A następnie w dodanie przeslanych odpowiedzi w jednym duzym insercie (insert into (id,id_checkboxa,zaznaczyl) values (1,2,3)(3,4,5) )

lub

2. sprawdzenie czy sa juz odpowiedzi od tego usera (select count(*) form where id usera)

a ) jesli nie bylo odpowiedzi to w petli php for dla przeslanych odpoweidzi insert kazdej odpowiedzi
lub
b ) jesli są wczesniejsze odpowiedzi to update kazdje z nich w petli for (update ....)



Zastanawia mnie wydajność obu podejść biorąc pod uwagę konieczność aktualizowania indexu w każdym z nich.
mmmmmmm
Ja wybrałbym 3 opcję: REPLACE
cyberpooh
hmm, ale replace to nic innego jak delete i insert zaraz potem, więc to rozwiązanie będzie prawdopodobnie wolniejsze niz powyższe.
Skie
Pierwsze będzie na pewno o niebo wydajniejsze z powodu wyeliminowania nadmiarowej ilośći requestów do bazy danych + pozostawienie optymalizacji dużej operacji dla bazy danych.

Jednakże, zamiast pytać na forum, zrób szybki test, w 15 min przygotujesz sobie takie dwa skrypciki dla każdego z przypadków i przetestujesz. Warto zrobić sobie tego typu nawyk, gdyż przy bardziej skomplikowanych przypadkach nie będziesz w stanie nawet oszacować , które podejście jest wydajniejsze smile.gif
mmmmmmm
Obawiam się, że jednak 3 opcja z REPLACE będzie szybsza niż DELETE + INSERT, bo wykonuje się jednym poleceniem i całkowicie na bazie danych tongue.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.