Wpis z mikrobloga

#mysql #sql #php

Mam zapytanie:

select nazwisko from uzytkownicy order by nazwisko asc

z tabeli w mysql

za pomocą php generuje kod do listy rozwijanej po przez pętlę, która co fetch wstawia:

(...) echo "<option value='" (...)

czyli uzyskuje zwykłą, prosta listę rozwijaną.

Problem polega na tym, że wierszy jest ~13 tyś i powoduje to problem wydajnościowy po stronie klienta. Wychodzi na to, że coś strasznie wolno dostarcza dane do klienta. Nie za bardzo obeznany jestem w mysql, więc...

... no właśnie -

1.problem z kodem php i tę listę można rozwiązać efektywniej czy

2.coś z bazą, która nie daje rady tych 13tysięcy nazwisk (varchar40) wypuścić ?
  • 15
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Supaplex: jesteś pewien że potrzebujesz listę rozwijaną z 13k nazwisk?

Może zrób to na zasadzie pola z podpowiedzią i np po 3 wpisanych znakach jest zapytanie do DB i po każdym kolejnym również które zwraca wszystko co pasuje do tego co wpisał user...
  • Odpowiedz
głównym problemem jak dla mnie jest to że próbujesz do listy dodać 13k rekordów, zastanów się czy tyle ma się znaleźć w jednej liście i czy nie lepiej to jakoś rozdzielić
  • Odpowiedz
Policz ile to będzie danych po stronie klienta, trochę duża ta lista się zrobi. Druga sprawa to czy masz na kolumnie nazwisko indeks ustawiony, bo jak nie to się filesort włączy i to trochę już spowalnia.
  • Odpowiedz
@weedget:

Dokładnie, to samo rozwiązanei bym sugerował. Jak można w ogóle próbować wsadzić 13k opcji w comboboksa? Te problemy wydajnościowe, o których piszesz @Supaplex to wynikają wg mnie z opóźnień przy konstruowaniu drzewa DOM w przeglądarce u klienta. Borykałem się z tym kiedyś w pracy - tylko asynchroniczne rozwiązanie tu ma sens.
  • Odpowiedz
@Bodek: Index stawiałem, ale to nie zwiększyło prądkości, więć problem nie jest po stronie odszukania i przygotowania danych a raczej ich dostarczenia.
  • Odpowiedz