Wykop.pl Wykop.pl
  • Główna
  • Wykopalisko174
  • Mikroblog
  • Zaloguj się
  • Zarejestruj się
  • Wykop.pl
  • Ciekawostki
  • Informacje
  • Rozrywka
  • Sport
  • Motoryzacja
  • Technologia
  • Ukraina
  • Gospodarka
  • Podróże

Dostosuj Wykop do siebie

Wybierz treści, które Cię interesują
i zapisz jako Własną kategorię.

To Znalezisko jest w archiwum

344

MySQL: 20 najlepszych praktyk

Bardzo przystępnie i czytelnie wyjaśnione jak pisać wydajne zapytania, wraz z obrazowymi przykładami.

ireks
ireks
ireks
z
net.tutsplus.com
dodany: 30.11.2009, 12:09:54
  • #
    technologia
  • #
    nowetechnologie
  • #
    mysql
  • #
    najlepsze
  • #
    praktyki
  • #
    sql
  • #
    best
  • #
    practices
  • #
    wydajnosc
  • 41

Treści powiązane (1)

C# Best Practices
chemicalkash
z dotnetspider.com
  • -1

Komentarze (41)

najlepsze

Yelonek
Yelonek
Yelonek
01.12.2009, 09:05:57
  • 15
Wiem, że to nie stack overflow, ale i tak zapytam. :P

Jak zaprojektować bazę w sqlite3, żeby móc przechowywać wyjściowe dane z kolejnych iteracji algorytmu? Powiedzmy mam 100000 (ta liczba może ulec zmianie) struktur z polami: float x, float y, float fitness (może jeszcze będę chciał zapisać: float xlb, float ylb, float fitnesslb). Dane są przetwarzane równolegle i dostępne w jednej chwili, więc trzeba je wszystkie naraz zapisać.

Obecnie mam taką: CREATE
  • 2
Yelonek
Yelonek
Yelonek
01.12.2009, 10:06:09
  • 14
Z insertami to samo mi się narzuciło, gdzieś o tym czytałem. Poza tym zajrzałem na stronę sqlite3, gdzie w faq jest to opisane. Przeprowadziłem małe badania i okazało się, że optymalna wielkość to 2000 insertów w jednej transakcji: czas wykonania 1:18 na zapis 10 razy po 100000 danych + trochę innego kodu. Przy synchronous off czas spadł do 0:53, a przy podwojeniu cache_size, czyli do 4000 mam 0:45. Może spróbuję jeszcze z
ireks
ireks
ireks
Autor
01.12.2009, 09:21:20
  • 1
Z samą strukturą tabeli dużo nie pokombinujesz. Ewentualnie, to jeśli możesz to używaj możliwie małych typów danych.

Jeśli chodzi o indeksy - każdy indeks spowalnia INSERT ale tabela bez Primary Key to zbrodnia. Tak więc utwórz tylko PK, żadnego innego (o ile jest tak jak mówisz - nie wyciągasz zbyt często tych danych).

Staraj się upakować jak najwięcej INSERTów do jednej transakcji, nie COMMITuj przy każdym INSERTcie.

Nie
f.....s
f.....s
konto usunięte 30.11.2009, 16:26:20
  • 10
Najlepszy jest autor Burak Guzel. Nie chciałbym mieć tak na imię.
  • 4
Diabl0
Diabl0
Diabl0
01.12.2009, 08:47:13
  • -3
Hmmm, nie chciał bym widzieć wyniku waszego zapytania za 10-20 lat

Jak już to:

SELECT * FROM buraczki WHERE dziewica IS NOT NULL AND dataurodzenia BETWEEN( DATESUB(dataurodzenia, INTERVAL 28 YEAR), DATESUB(data_urodzenia, INTERVAL 18 YEAR))
o.....q
o.....q
konto usunięte 01.12.2009, 09:25:56
  • -10
buraczkiDataContext db=new buraczkiDataConext();

var buraczek=(from p in db.Buraczki where p.DataUrodzenia==Datetime.Now.AddYears(-25) select p).Single();

try { System.FedEx.Send(buraczek); }

catch
Crea
Crea
Crea
01.12.2009, 08:57:39
  • 8
nic mi to nie mowi,ale wykopie dla innych
  • 1
suchanice
suchanice
suchanice
01.12.2009, 19:42:05
  • 2
O! To Ty też? Ufff...
jacekp
jacekp
jacekp
01.12.2009, 07:58:29
  • 7
Dorzucę jeszcze jedno często zapominane, po WHERE w pierwszejk olejności podajemy pola na które mamy założony indeks np

WHERE id = 1 and pass = SHA1('cos');

bedzie duzo szybsze niz

WHERE pass = SHA1('cos') and id = 1;
  • 7
sajgonki2piedziesiat
sajgonki2piedziesiat
sajgonki2piedziesiat
01.12.2009, 10:40:09
  • 5
tak bylo, ale w przeszlosci. Zrob sobie explain'y na obu wersjach, powinienes otrzymac ten sam wynik.
i.....r
i.....r
konto usunięte 01.12.2009, 17:02:44
  • 3
MySQL, podobnie jak większość innych serwerów baz danych, ma optymalizator zapytań, który automatycznie poprawia m.in. kolejność warunków.

Dotyczy to nie tylko WHERE, optymalizator może nawet zmienić FROM t1 INNER JOIN t2 na FROM t2 INNER JOIN t1, jak wyjdzie że to jest szybsze.
b.....k
b.....k
konto usunięte 30.11.2009, 18:52:34
  • 6
21*
  • 5
ireks
ireks
ireks
Autor
30.11.2009, 20:18:21
  • 15
A kłamczuch nawet w URL-u napisał 20. Tak więc 'informacja nieprawdziwa' ;-)
p.....y
p.....y
konto usunięte 01.12.2009, 00:14:02
  • 12
@b1ckjack - pewno się cieszysz, że akurat 21 ;)
makkak
makkak
makkak
01.12.2009, 09:10:51
  • 4
Skoro tak sobie doradzamy to ja jeszcze poradze na temat WHERE i AND lub OR mianowicie:

Jezeli w WHERE mamy warunki rozdzielone za pomoca AND to warunek najmniej prawdopodobny dajemy jako pierwszy (jezeli jego wartosc jest falsz to cale wyrazenie traktowane jest jako falsz bez sprawdzania drugiego warunku)

Jezeli w WHERE mamy warunki rozdzielone OR to warunek najbardziej prawdopodobny dajemy jako pierwszy (jezeli jego wartosc jest true to cale wyrazenie traktowane jest
  • 1
armata
armata
armata
01.12.2009, 09:43:38
  • 2
to się odnosi nie tylko do MySQL ale ogólnie do programowania. Jak ktoś rozumie logikę to z łatwością zauważy dlaczego tak się powinno układać warunki.

Ale ale premature optimization is the root of all evil
furiosan
furiosan
furiosan
01.12.2009, 11:05:17
  • 3
Artykuł to dowód, że większość programistów web'owych oraz PHP to nie programiści baz danych. Rada by ozywać ORM jest jak najbardziej na miejscu.
  • 3
Borszczuk
Borszczuk
Borszczuk
01.12.2009, 13:18:31
  • 13
Jestem pelen podziwu ze chciales napisac "óżywać"...
muaddib
muaddib
muaddib
01.12.2009, 13:37:09
  • 8
Może on chciał ożywiać?
aberazioon
aberazioon
aberazioon
02.12.2009, 09:19:57
  • 2
lubię czytać mądre rzeczy nie mając o nich zielonego pojęcia.
kulpak
kulpak
kulpak
01.12.2009, 10:26:17
  • -4
http://www.develway.pl/wiadomosc/top-20-mysql-best-practices Serwis podobny do wykopu oparty o tematykę informatyki.
altruista
altruista
altruista
30.11.2009, 22:41:45
  • -13
"3. LIMIT 1 When Getting a Unique Row"

Jak sama nazwa wskazuje to nic nie da przecież skoro kolumny w WHERE są unikalne :))

Poza tym lepiej jest robić

if
  • 4
kajlerkompajler
kajlerkompajler
kajlerkompajler
01.12.2009, 09:50:07
  • 6
Nawet jeżeli w bazie masz tylko 1 unikalny rekord, który spełnia WHERE, to po znalezieniu go baza dalej będzie przeszukiwana do końca, więc LIMIT 1 oszczędza czas od znalezienia Twojego rekordu do przeszukania reszty bazy.

"if ($w = @mysqlfetchrow($q)) niż if (mysqlnumrows($q) > 0) "

Jak widzisz autor sprawdza czy w ogóle jest taki rekord, a nie chce wyciągnąć z niego danych (SELECT 1) więc po co w przekazywać rekord z jedynką do $w, tylko po to żeby określić czy user spełniający kryterium
M.....s
M.....s
konto usunięte 01.12.2009, 07:46:55
  • 3
Przeczytaj jeszcze raz ten tekst, tym razem ze zrozumieniem, bo widać, że wiele możesz się z niego nauczyć.
  • <
  • 1
  • 2
  • Strona 1 z 2
  • >

Hity

tygodnia

Ikea nominowana do Biologicznej Bzdury Roku
Ikea nominowana do Biologicznej Bzdury Roku
4197
Jak Fundacja Batorego (ta od Sorosa i Holland) finansuje nielegalną migrację
Jak Fundacja Batorego (ta od Sorosa i Holland) finansuje nielegalną migrację
3970
Onet robi wywiad na temat gwatłów z ginekolożką, która nie istnieje
Onet robi wywiad na temat gwatłów z ginekolożką, która nie istnieje
3831

Zawiera treści 18+

Ta treść została oznaczona jako materiał kontrowersyjny lub dla dorosłych.

  • appleowner
    appleowner
    appleowner
  • 3064
  • 287
  • #
    imigranci
  • #
    granica
  • #
    bialorus
  • #
    strazgraniczna
  • Zaloguj się
  • Zarejestruj się
Kolejny sukces straży miejskiej: Dziewczynki sprzedające lemoniadę rozgonione
Kolejny sukces straży miejskiej: Dziewczynki sprzedające lemoniadę rozgonione
3166
Pokaż więcej

Powiązane tagi

  • #ciekawostki
  • #nauka
  • #zainteresowania
  • #komputery
  • #rozrywka
  • #swiat
  • #internet
  • #motoryzacja
  • #informatyka
  • #polska

Wykop © 2005-2024

  • Nowy Wykop
  • O nas
  • Reklama
  • FAQ
  • Kontakt
  • Regulamin
  • Polityka prywatności i cookies
  • Hity
  • Ranking
  • Osiągnięcia
  • więcej

RSS

  • Wykopane
  • Wykopalisko
  • Komentowane
  • Ustawienia prywatności

Wykop.pl

Podróże

Gospodarka

Ukraina

Technologia

Motoryzacja

Sport

Rozrywka

Informacje

Ciekawostki