Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][JavaScript] Które z rozwiązań autosuggesta będzie wydajniejsze ?
jajcarzd1
post 8.08.2009, 11:36:40
Post #1





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

Ostrzeżenie: (0%)
-----


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 ?


--------------------
My mind is glowing ...
Jeśli pomogłem push the button :)
Go to the top of the page
+Quote Post
zeten
post 8.08.2009, 12:02:28
Post #2





Grupa: Zarejestrowani
Postów: 36
Pomógł: 2
Dołączył: 1.08.2009
Skąd: Katowice, Rybnik

Ostrzeżenie: (0%)
-----


Drugie rozwiazanie jest bardziej wydajniejsze.
Go to the top of the page
+Quote Post
jajcarzd1
post 9.08.2009, 01:54:38
Post #3





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

Ostrzeżenie: (0%)
-----


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


--------------------
My mind is glowing ...
Jeśli pomogłem push the button :)
Go to the top of the page
+Quote Post
motylo
post 9.08.2009, 09:39:41
Post #4





Grupa: Zarejestrowani
Postów: 35
Pomógł: 5
Dołączył: 13.07.2008
Skąd: Kalisz

Ostrzeżenie: (0%)
-----


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.


--------------------
Więcej: blog.juszczak.org
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 10:08