Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][JavaScript] Które z rozwiązań autosuggesta będzie wydajniejsze ?
Forum PHP.pl > Forum > Przedszkole
jajcarzd1
Witam

Mam takie pytanie. Otóż wykorzystuję jednego z pluginów jQuery jako autosuggesta. Przykład ze strony tego plugina jes oparty na rozwiązaniu pobrania wszystkich rekordów z danej tabeli a następnie przelecenie po nich w pętli szukjąc za pomoca strpos co akurat u mnie w skrócie wyglądało by tak:

  1. <?php
  2. $documents = $classDocuments->dbGetDocuments();
  3. foreach ($documents as $item) {
  4.            if (strpos(strtolower($item['nr']), $searchPhrase) !== false or strpos(strtolower($item['title']), $searchPhrase) !== false) {
  5.                $response[] = array("id"=>$item['iddocuments'],"nr"=>$item['nr'],"title"=>$item['title']);
  6.            }
  7.        }
  8.        
  9.        header('Content-type: application/json');
  10.        echo json_encode($response);
  11. ?>


przeszukuję po dwóch polach: po numerze i tytule.

Więc to jest pierwsze rozwiązanie. Natomiast ja bardziej się skłaniam do wyszukania odpowiadających fraz już przez samo zapytanie bazy czyli rozwiązanie jak poniżej w metodzie dbGetDocuments().

  1. <?php
  2. ...... "d.nr like '%".$search['search_phrase']."%' or d.title like '%".$search['search_phrase']."%'" ......
  3. ?>


No i teraz pytanie któro z rozwiązań może być wydajniejsze. Zakładamy że baza to mysql, ilość rekordów tudno orzec ale załózmy np do 5000, oba pola typu varchar pewnie indeksowane, typ normal, wyszukwianie możliwe po wpisaniu przynajmniej jednej litery.

Będe wdzięczny za sugestie

No i co nikt mi nic nie podpowie w tym temacie ?
zeten
Drugie rozwiazanie jest bardziej wydajniejsze.
jajcarzd1
Cytat(zeten @ 8.08.2009, 13:02:28 ) *
Drugie rozwiazanie jest bardziej wydajniejsze.


No też mi się tak coś wydaje, szczególnie chyba jeśli będą indeksy choć jeszcze nie wiem na ile znaków, ale z drugiej strony konstrukcja like z parametrami po obu stronach zmiennej do najszybszych chyba też nie należy
motylo
drugie lepsze i nie ma co się zastanawiać.
Zastanów się, lepiej robić zapytanie bez LIKE do bazy danych, pobierać wszystkie wyniki i później przetwarzać przez PHP, czy też od razu w bazie danych zadać LIKE i mieć gotowe wyniki.
Baza danych zadziała szybciej bo jest dostosowana do szybkiego wyszukiwania nawet przez LIKE niż przetwarzanie PHP.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.