Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wolne LIKE '%...%' w tabeli typu InnoDB, Niestety nie mogę użyć MyISAM
TomASS
post
Post #1





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Hej!

Mam zapytanie typu:
  1. SELECT count(*) FROM tabela WHERE pole LIKE '%xyz%';


gdzie tabela ma silnik InnoDB, a pole jest typu char(200), oczywiście istnieje indeks na kolumnie "pole".
W polu "pole" trzymam numery oddzielone znakami średnika:

Cytat
3123123131;5124124314;44123123;312312312;


chciałbym wyszukać czy istnieje chociaż jeden rekord zawierający jakiś numer (np 44123123).
Niestety rekordów jest 300.000 (i rośnie) a za jedną operacją (skrypt PHP) wyszukiwanie następuje około 1000razy.
Niestety zapytanie typu:
  1. SELECT count(*) FROM tabela WHERE pole LIKE '%44123123%';


trwa 4sekundy co przy 1000 opracjach skutecznie zawiesza skrypt :/
Pewnie można by było użyć FULL-TEXT Search ale jest to tablica typu InnoDB w którym to FULL-TEXT nie występuje (IMG:style_emoticons/default/sad.gif)
Bardzo obawiam się zmienić rodzaj silnika z InnoDB na MyISAM i bardzo niechętnie to zrobię. (Wiąże się to dla mnie z kilkoma dniamia testów czy nic się nie popsuło) + audyt.

Czy ktoś ma pomysł jak zoptymalizować takie wyszukiwanie? Może ostatecznością jest wyszukać to w PHP? :/
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
SmokAnalog
post
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Dokładnie, indeks dla LIKE z procentami po obu stronach kompletnie nie nie daje.

Jeśli chcesz to rozwijać, to zmiana struktury bazy jest niezbędna. Może warto byłoby przerobić kod na obiektowy i logikę zapytań zrzucić na modele? Jeśli Twój projekt jest duży, to powinieneś pomyśleć poważnie o jego architekturze.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 01:05