Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL] Wyszukiwanie
Forum PHP.pl > Forum > Przedszkole
styryl
Witam

I mam kolejny problem, mam baze danych i tabele gdzie są pola id,title,lin,opened,date,bad i mam ponad 350 000 tys rekordów. W bazie wyszukuje za pomocą title Like $word co jest masakrą dla serwera (gdy jest duży ruch na stronie) i tutaj moje pytanie jak to zoptyamlizować fulltext odpada bo nie można wyszukiwać 3 literowych fraz, więc jak to zrobić ?

Pozdrawiam
Shili
Zapoznaj się z tematem o wyszukiwaniu: http://forum.php.pl/index.php?showtopic=38307

Jest tam sporo podpowiedzi.
marcio
@up kurde kazdy tak pisze ale z tego i tak nie wyciaglem wnioskow i tez nie wiem jak poprawic smile.gif dlaczego ktos na php.pl nie napisze o tym art'a??
styryl
jak to jest z innymi indexsami czy zakłada się je gdy baza jest pusta czy jak jest już pełna. Czy tworzy on index po wyszukaniu? Jak to się ma podczas dodawania nowych rekordów? Jak indeksy są aktualizowane i w którym momencie?
marcio
ZNam ale malo co rozumiem moze ktos wytlumaczy to tak krotko z jakims przykladem art nie jest dlugi.....
phpion
Odnośnie pytanie "co to są indeksy" to najlepiej przedstawić to na przykładzie książki. Mamy książkę (tylko kartki z treścią) i chcemy w niej znaleźć coś na temat np. MySQL. Musimy więc przejrzeć wszystkie strony w poszukiwaniu frazy "MySQL". To jest baza bez indeksów. Jednak jeśli na końcu książki znajduje się skorowidz/indeks pojęć to zadanie jest zdecydowanie prostsze. Szukamy "MySQL" w skorowidzu, patrzymy jakie strony zawierają poszukiwane informacje, przechodzimy bezpośrednio do konkretnych stron w książce. Podobną rolę odgrywają indeksy w bazie danych. Bez nich baza jest przeszukiwana sekwencyjnie (wiersz po wierszu).
marcio
To jak zrobic index'y dal wyszukiwarki i w ogole bymbym wdzieczny jak bys to opisal smile.gif
erix
Załóż przede wszystkim indeks na te kolumny, których używasz do wyszukiwania. ;]

I zrób sobie bencha.
marcio
Mam:http://img159.imageshack.us/my.php?image=zrzutekranu4ke1.png
Robie zapytanie typu:
  1. <?php
  2. mysql_query("select id,match(login_r) against(".$szukaj.") from users where match(login_r) against(".$szukaj.") order by id limit ".$strona*$liczba.",".$liczba."", $db);
  3. ?>

I sa bledy i nic nie szuka moze ktos z was pomoze fajnie by bylo majac czyste sumienie ze wyszukiwarka nie zajedzie bazy smile.gif

P.S oczywiscie takie zapytanie z LIKE dziala
  1. <?php
  2. $query_search = ("select * from ".$tabela." where ".$kolumna." like '%$szukaj%' or ".$kolumna1." like '%$szukaj%' order by id desc limit ".$strona*$liczba.",".$liczba."");
  3. ?>
Riklaunim
Poleciłbym - w przypadku MySQL - postawienie Sphinxa - http://www.sphinxsearch.com/ i wykorzystał go do wyszukiwania. Jest to bardzo wydajne narzędzie i rozwiąże problem szukania w dużej ilości rekordów. Do PHP jest ładne api (tu jakiś tutorial)
marcio
Wiem ze jest ale nie chce gotowcow
Riklaunim
Cytat(marcio @ 18.06.2008, 13:10:28 ) *
Wiem ze jest ale nie chce gotowcow


LOL ?

To nie skrypt PHP, tylko systemowa aplikacja.
marcio
Nie wiem co to slyszalem o tym chce sobie sam wyszukiwarke napisac ale LIKE przy duej bazie bedzie zabójczy
Riklaunim
Cytat(marcio @ 18.06.2008, 13:31:20 ) *
Nie wiem co to slyszalem o tym chce sobie sam wyszukiwarke napisac ale LIKE przy duej bazie bedzie zabójczy


oj, coś biednie z wiedzą - nawet popatrzeć się nie chce. W Sphinxie tworzyć indeksy - definiujesz jakie pola z jakich tabel dla danego indeksu Sphinxa mają być indeksowane. On to sobie odpowiednio indeksuje i co jakiś czas aktualizuje -- i oferuje bardzo szybkie pełnotekstowe wyszukiwanie, a jako wyniki zwraca IDki rekordów, które zostały dopasowane. To nie jest jakaś aplikacja www tongue.gif chcesz napisać wyszukiwarkę - to za pomocą Sphinxa to zrobisz.
styryl
Cytat(styryl @ 16.06.2008, 09:20:36 ) *
jak to jest z innymi indexsami czy zakłada się je gdy baza jest pusta czy jak jest już pełna. Czy tworzy on index po wyszukaniu? Jak to się ma podczas dodawania nowych rekordów? Jak indeksy są aktualizowane i w którym momencie?


Jednak prosiłbym na prcyzyjną odpowiedź czyli
1. Index założyć gdy mam baze pusta ale wiem że już będzie olbrzymia czy dopiero jak już bedą w niej rekordy
2. Jak się aktualizują te indexsy
3. Kiedy mysql tworzy sobie index po wyszukaniu czy jak?

I jest gdzieś po polsku o sphinx

Pozdrawiam
erix
1: to wtedy serwer obliczy je na nowo. Wiadomo, na pustej bazie nie ma czego liczyć, to będzie szybciej.
2: o ile mnie pamięć nie myli, to wraz z dodawaniem rekordów.
3: jw.

Cytat
I jest gdzieś po polsku o sphinx

Raczej marne szanse na to. Skoro zabierasz się za poważniejsze rzeczy niż "hello world", to chyba zdajesz sobie sprawę, że 95% dokumentacji/aplikacji jest pisane w języku angielskim, nie?
styryl
Ano zdaje sobie sprawe biggrin.gif Dzieki prezes za odpowiedź
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.