Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwanie LIKE mysql duża tabela
Forum PHP.pl > Forum > PHP
tabbi
Witam,

chce w czasie rzeczywistym wyszukiwać rekord w tabeli z 4 mln rekordów. Do tego stosuje LIKE jednak zapytanie trwa koło 10 sekund i zazwyczaj przekracza dopuszczalną pamięć.

Struktura tabeli:
id int(10) UNSIGNED AUTO_INCREMENT
id_group int(11) UNSIGNED
name varchar(145) utf8_general_ci
code varchar(45) utf8_general_ci
car varchar(145) utf8_general_ci

Mam indeksy typu BTREE na name,code,id_group

Czy da radę to przyspieszyć ? Niestety brak unikatowych rekordów.
wizu
Jeśli wyszukujesz w taki sposób:
  1. LIKE %search%

To zastanów się, czy nie możesz zrezygnować z pierwszego %. Wyszukiwanie LIKE search%, korzysta z indeksów, natomiast LIKE %search% już nie.

Próbowałeś z indexem FULLTEXT i MATCH() AGAINST()? Również powinno całkiem nieźle poprawić szybkość wyszukiwania.

Podaj jakiś przykład danych z których wyszukujesz i kolumnę po której szukasz.
Sephirus
Popieram @up

MATCH AGAINST powinno być szybsze i skuteczniejsze.

Daj indeks FULLTEXT na 3 polach - name, code i car

Następnie użyj polecenia typu:

  1. SELECT
  2. *,
  3. MATCH (name,code,car) AGAINST ('to czego szukam' IN BOOLEAN MODE) AS score
  4. FROM
  5. tabela
  6. WHERE
  7. MATCH (name,code,car) AGAINST ('to czego szukam' IN BOOLEAN MODE)
  8. ORDER BY
  9. score DESC


W ten sposób uzyskasz (prawdopodobnie) o wiele szybsze wyszukiwanie + uporządkowanie (sortowanie) od najwlepszych trafień (trafności)
gothye
Jest jeszcze sphinx , ostatnio zastosowałem go do bazy z ilością rekordów 10mln. ,rekordy podczas wyszukiwania są zwracane w czasie poniżej 0.001s
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.