Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Długi czas trwania zapytania
Forum PHP.pl > Forum > Bazy danych > MySQL
infor946
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.
ActivePlayer
moze uzyj mysqlowego
  1. SELECT SQL_CALC_FOUND_ROWS
a potem
  1. SELECT FOUND_ROWS() AS Ilosc
Example http://phpedia.pl/wiki/Stronnicowanie
infor946
to niestety nie pomaga, nie widze różnicy, nadal jest wolno
orson
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
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.