Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> optymalizacja -delete + insert czy update
cyberpooh
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 19.07.2005

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


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.

Ten post edytował cyberpooh 12.04.2015, 21:47:43
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
mmmmmmm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Ja wybrałbym 3 opcję: REPLACE
Go to the top of the page
+Quote Post
cyberpooh
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 19.07.2005

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


hmm, ale replace to nic innego jak delete i insert zaraz potem, więc to rozwiązanie będzie prawdopodobnie wolniejsze niz powyższe.
Go to the top of the page
+Quote Post
Skie
post
Post #4





Grupa: Zarejestrowani
Postów: 555
Pomógł: 84
Dołączył: 20.02.2008
Skąd: Małopolska

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


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


--------------------
Wieloprocesowość i wielowątkowość w PHP, poznaj Kraken PHP!
Serwer HTTP i WebSocket w PHP | Promise/A+
Strona Domowa | Elradia MMORPG
FireFox: make the web better.
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #5





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


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
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 Aktualny czas: 22.08.2025 - 11:03