Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 150 Pomógł: 3 Dołączył: 30.10.2010 Ostrzeżenie: (0%)
|
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. |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 127 Pomógł: 15 Dołączył: 16.02.2008 Skąd: Sanok Ostrzeżenie: (0%)
|
Jeśli wyszukujesz w taki sposób:
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. Ten post edytował wizu 18.01.2012, 01:43:48 |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%)
|
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:
W ten sposób uzyskasz (prawdopodobnie) o wiele szybsze wyszukiwanie + uporządkowanie (sortowanie) od najwlepszych trafień (trafności) |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 702 Pomógł: 65 Dołączył: 16.03.2009 Ostrzeżenie: (0%)
|
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
|
|
|
|
![]() ![]() |
|
Aktualny czas: 24.12.2025 - 11:59 |