Wpis z mikrobloga

Jak bardzo złe jest wykonywanie selectów w pętli? Mam sobie relacje (taką autobusową) i ona ma sobie przystanki. Relacja jest w osobnej tabeli, przystanki i rozkład w osobnych. Najpierw odpytuję o relacje, dostając przy okazji id a potem pytam po przystanki w pętli dla każdej relacji. Można jakoś lepiej? #programowanie #sql #php
  • 26
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@m4kb0l: acha, nie zmieściły się na obrazku? :)

Btw, w razie bardzo dużej liczby powtarzających się tras - a tak byłoby przy rzeczywistych trasach komunikacji miejskiej albo pociągów osobowych - możesz zrobić select bez rel albo nawet bez roz, a potem podobierać je WHERE IN na podstawie tego, co sobie sam wyciągniesz w PHP (żeby nie pytać bazy drugi raz o to samo tylko pogrupowane; ewentualnie można posiłkować się
  • Odpowiedz
@m4kb0l: Chcesz wiedzieć czemu nadaje się id a nie nazwę czytelną dla użytkownika?

Weźmy sobie takie przystanki. W Polsce mamy 2600 przystanków kolejowych. Nazwę przystanku upchniemy sobie w char(20) które zajmuje 20 bajtów. liczbę 2000 możemy też upchnąć w smallint które ma 2 bajty.

Jednokrotne wykorzystanie nazwy przystanku w tabeli to 20 bajtów, w przypadku tabeli przechowującej nazwę mamy stałe 22 bajty na przystanek + 2 bajty na odniesienie do
  • Odpowiedz
@ppawel: Jeśli to byłby realny projekt to dotyczy firmy przewozowej, takie jak polskibus więc nie było by tego bardzo dużo. Myślę, że góra 10-20.

@plushy: Rozumiem co chcesz powiedzieć i rozumiem też idee optymalizacji ale jak chciałbyś powiedzieć użytkownikowi o relacji? Relacja o id: 5? A o przystanku? Jedź z przystanku o id 5? LOL. Poza tym tekst jest typu varchar (nie wiem dlaczego chcesz to wpieprzać do
  • Odpowiedz
@plushy: A o te nazwy relacji chodzi - niestety z tym jest różnie w zależności od dziedziny - w przypadku komunikacji miejskiej sprawdzi się ten model, który opisałeś, ale w pociągach każda relacja będzie miała oddzielną nazwę, np. Os 12345 a czasem nazwę handlową np. Ekspress "MICHAŁ BIAŁEK", więc tu słownikowanie się nie sprawdzi. Ale jeśli chodzi tylko o przystanki początkowe i końcowe - to tak, te warto dodać po
  • Odpowiedz