majestiq
24.09.2008, 08:41:34
<?php
$sql = 'SELECT * FROM `tabela` WHERE `tytul` REGEXP ''.$tytul.'' LIMIT 10 ';
?>
Czy można jakoś zoptymalizować to zapytanie, mam wrażenie, że przy dużej liczbie użytkowników powoduje ono
przeciążenie bazy. Czy rzeczywiście tak może być ?
golaod
24.09.2008, 09:06:54
Nie da się zoptymalizować tego zapytania, co najwyżej możesz zoptymalizować samego regexpa który nie wiem jaki jest.
Możesz też zamiast bawić się w regexpy po prostu szukać po jakiś słowach kluczowych lub całym tytule.
=
LIKE
LIKE '%as'
LIKE 'as%'
LIKE '%as%' - to strasznie zamula czasem może trwać nawet 30 sekund.
majestiq
24.09.2008, 09:16:45
Czyli co LIKE jest ogólnie lepsze (szybsz) niż REGEXP ?
golaod
24.09.2008, 09:58:51
Tzn. nie mam wielkiego pojęcia na temat LIKE wiem tylko tyle, że = to ułamki sekund w poszukiwaniu LIKE też nawet LIKE z jednym znakiem % po którejś stronie stringu jednak LIKE z % po obu stronach jest strasznie wolne. Regexp zaś sądzę, że działa jak LIKE %% bo nie dość, że lata po wszystkich stringach które musi dopasować podobnie jak LIKE %% to jeszcze w dodatku musi sprawdzać pod względem poprawności z wyrażeniem regularnym...wystarczy zrobić test. Zrób automatem np. w php który wprowadzi Ci do tabelki(tak z 10 kolumn) losowe dane tekstowe ale to takie totalne. I potem poszukaj za pomocą regexp jakiegoś lotto znaku np. axt potem zrób to samo tylko z LIKE. Sądzę, że powinno być znacznie szybsze ale pewności nie mam bo benchmarków nigdy nie widziałem.