![]() |
![]() |
![]()
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 |
|
|
![]() |
![]()
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
|
|
|
![]()
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.
|
|
|
![]()
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 ![]() -------------------- 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. |
|
|
![]()
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
![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 11:03 |