Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Długi czas trwania zapytania, match against
infor946
post 15.03.2006, 14:40:14
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 22.02.2006

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


Mam MySQL 5 i tabele z 1mln rekordów

ID varchar(150) PK
kol1 varchar(255)
kol2 varchar(255)
kol3 varchar(255)
kol4 varchar(255)
kol5 varchar(255)
keywords(text) fulltext

kolumna keywords może zawierać od kilkunastu do kilkuset słów kluczowych.

robie wyszukiwanie pełnotekstowe:

  1. "Select ID, kol1, kol2, kol3, kol4, kol5
  2. from tabela
  3. where match(keywords) against ('"słowo1" +"słowo2" +"słowo3" -"słowo4"' in boolean mode) LIMIT 0, 30"

i tu dzięki użyciu limitu baza śmiga. Ale potrzebna jest mi także calkowita liczba rekordów z takiego zapytania:
  1. "select count(ID)
  2. from tabela
  3. where match(keywords) against ('"słowo1" +"słowo2" +"słowo3" -"słowo4"' in boolean mode)"

i niestety ale to zapytanie w niektórych przypadkach trwa nawet kilka minut.
Przed updatem bazy kiedy miałem niecałe 200 tyś to drugie zapytanie działało bez zarzutu. A teraz zapytanie bez limitu do tej bazy raz trwa około 5 sek, raz 10 a czasmi kilka minut i nie mam pojęcia od czego to zależy.

Jak rozwiązać takie wyszukiwanie ? A może coś da się zrobić z samą bazą, w tej chwili mam plik konfiguracyjny my-large.ini a baza stoi razem z apache i php na PIV 3.GHz 1 GB RAM - po za tym żadne inne programy nie są uruchomione.

Ten post edytował infor946 15.03.2006, 15:25:08
Go to the top of the page
+Quote Post
ActivePlayer
post 15.03.2006, 15:56:04
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


moze uzyj mysqlowego
  1. SELECT SQL_CALC_FOUND_ROWS
a potem
  1. SELECT FOUND_ROWS() AS Ilosc
Example http://phpedia.pl/wiki/Stronnicowanie
Go to the top of the page
+Quote Post
infor946
post 15.03.2006, 17:23:16
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 22.02.2006

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


to niestety nie pomaga, nie widze różnicy, nadal jest wolno
Go to the top of the page
+Quote Post
orson
post 15.03.2006, 23:31:27
Post #4





Grupa: Zarejestrowani
Postów: 548
Pomógł: 2
Dołączył: 19.07.2003

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


witam ...

czy jest możliwa zmiana struktury tablicy questionmark.gif bo bez zmian to nie będzie działać choćbyś nie wiem co zrobił ...

moje rady:
- zmień słowa kluczowe na oddzielone przecinkiem i rób FIND_IN_SET
lub
- duże wyszukiwarki nigdy nie podają dokładnej liczby wyników ... każde słowo kluczowe ma przypisaną ilość wystąpień ... żeby znaleść przybliżoną ilość po prostu sumują wystąpniea każdego słowa z zapytania ... jak duże są wyniki szukania questionmark.gif 100 questionmark.gif 200 questionmark.gif jeżeli tak to takie podejście jest dobre bo i tak nikt nie będzie zaglądał dalej niż max 10 stron ... więc zrób tabelę z słowami kluczowymi i za każdym dodaniem słowa/usunięciem słowa +/- 1 do tej tabeli ... jak słowa nie ma to dodajesz ... (oczywiście wywalasz "i", "lub", "są" itp)

pozdrawiam


--------------------
Computer games don't affect kids; I mean if <span style="font-weight: bold;">Pac Man</span> affected us as kids,we would all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music.
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: 23.06.2025 - 11:07