![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 189 Pomógł: 13 Dołączył: 20.09.2008 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
w bazie potrzebuję zrobić coś, by móc szybko wyszukać dane z pola VARCHAR(100). w różnych rekordach dane mogą się powtarzać. czy zastosowanie INDEX-u (INDEX(nazwa_pola)) będzie odpowiednim sposobem na rozwiązanie problemu? a może powinienem zrobić jeszcze coś?
Ten post edytował czychacz 8.12.2010, 11:36:18 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Zależy jakie masz zapytania na używające tego pola.
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 189 Pomógł: 13 Dołączył: 20.09.2008 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Indeks dla zapytań LIKE nie działa. Musisz zastosować techniki wbudowane w takie silniki wyszukiwania ja SOLR, Sphinx (rozbijanie na słowa oraz ich indeksowanie).
Pozostaje jeszcze algorytm n-gramów. -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 189 Pomógł: 13 Dołączył: 20.09.2008 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
czyli, skoro indeks nie działa dla LIKE - muszę sam filtrować dane dla konkretnych zapytań lub zdać się na szybkość serwera MySQL?
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Należy przebudować wyszukiwanie aby nie korzystało z like. Pierwsze podpowiedzi już dałem.
Poza tym powiedz dlaczego masz akurat takie a nie inne wyszukiwanie? -------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 189 Pomógł: 13 Dołączył: 20.09.2008 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
zapytanie ma na celu wyszukać wszystkie rekordy, w których nazwa_pola zawiera określone słowa. słowa nie muszą występować w odpowiedniej kolejności.
//dodatkowe info: klientem korzystającym z bazy jest aplikacja pisana w pascalu. nie wiem, czy ta informacja będzie jakkolwiek przydatna. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Więc odeśle do mojego drugiego posta
![]() -------------------- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 154 Pomógł: 5 Dołączył: 24.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
Moze lepsze bedzie przeszukiwanie pelnotekstowe? (MATCH AGAINST)
-------------------- |
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Indeks dla zapytań LIKE nie działa. Nie do końca masz rację.Działa jeśli ciąg nie zaczyna się od %, czyli:
nie zadziała, ale:
spowoduje użycie indeksu (oczywiście o ile będzie to korzystniejsze od skanowania). |
|
|
![]()
Post
#11
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Nie do końca masz rację.Działa jeśli ciąg nie zaczyna się od %, czyli:
nie zadziała, ale:
spowoduje użycie indeksu (oczywiście o ile będzie to korzystniejsze od skanowania). Racja, ale oczywiście nie znajdzie to szerszego zastosowania w problemie kolegi. Poza tym w takim przypadku o jakim mówisz, lepiej użyć indeksu prefixu (wyciąga parę pierwszych liter). -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 8.07.2025 - 05:51 |