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 (IMG:style_emoticons/default/smile.gif)
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 (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 8.10.2025 - 03:33