Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> optymalizacja where ... or ...
jarmiar
post
Post #1





Grupa: Zarejestrowani
Postów: 616
Pomógł: 12
Dołączył: 16.07.2006
Skąd: : getCity ( );

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


Ponoć lepiej rozbić OR w klauzuli WHERE na UNION SELECT, aby zapytanie szybciej się wykonywało.
Przeprowadziłem więc testy. Szybciej wykonywało się zapytanie, w którym w klauzuli WHERE był OR aniżeli to z UNION SELECT.
Czy to rozwiązanie jest optymalne w przypadku dużej ilości rekordów? (testy przeprowadzałem na ok 4 tyś rekordów)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
Niktoś
post
Post #2





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


No to spróbuj na UNION ALL-a zobaczysz różnice.

Ten post edytował Niktoś 22.03.2012, 14:17:44
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




@Niktoś a niby co to ma poprawić? Przecież ALL nie wpływa na szybkość tylko na sposób zwracania danych

@jarmiar to może podaj strukture tabeli, indeksy, zapytanie które masz.
użyj też EXPLAIN by sprawdzić co się dzieje
Go to the top of the page
+Quote Post
alegorn
post
Post #4





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

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


powinna byc roznica.

podaj nam jeszcze jesli mozna prosic sqlki jakie uzyles - moze nedzie mozna cos wiecej wywnioskowac..
j.
Go to the top of the page
+Quote Post
Niktoś
post
Post #5





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


http://pl.wikipedia.org/wiki/Operator_Union
http://stackoverflow.com/questions/3374459...joins-just-suck

To powinno wyjaśnić dlaczego union all jest szybszy od union i join z or
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




A ty jak zwykle na teorii...

Spójrz na problem. Dla 4tys rekordów union ALL ci nic nie da.
Go to the top of the page
+Quote Post
Niktoś
post
Post #7





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


Powinno nieznacznie pszyspieszyć.Autor tego tematu przeprowadza testy,to ja zaproponowałem przeprowadzenie dodatkowo testów z union all, może akurat będzie wydajniej.
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Nie będzie. DLa 4tys nie będzie żadnej różnicy, a nawet jak będzie to będzie to różnica na poziomie milisekund i to nie koniecznie na korzyść union all.

Żeby tu rozwiązać problem to trzeba zobaczyć jakie są indeksy, co zwraca EXPLAIN. Co z tego ze da UNION, jeśli indeksy ma do 4 liter i zamiast jednego wolnego zapytania to z UNION będzie miał dwa wolne zapytania a przez co będzie działało dłużej.

Nie kłóćmy się więc o głupoty tylko poczekajmy na dane.
Go to the top of the page
+Quote Post
Niktoś
post
Post #9





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


Cytat
Nie kłóćmy się więc o głupoty tylko poczekajmy na dane.

Racja, ja się nie kłócę ,dałem propozycję,poza tym sam jestem ciekaw (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
jarmiar
post
Post #10





Grupa: Zarejestrowani
Postów: 616
Pomógł: 12
Dołączył: 16.07.2006
Skąd: : getCity ( );

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


Testy przeprowadzałem najpierw bez indeksów a potem z indeksami. Oczywiście w przypadku indeksów zapytania (oba) wykonywały się nieco szybciej, jednak nadal UNION zostawał w tyle.

Bez indeksów:

OR: 0,0060

UNION: 0,1365

Po nałożeniu indeksów:

OR: 0,0045
UNION: 0,1325

Załączam screena po EXPLAIN:

http://s4.ifotos.pl/img/screenpng_rnrseen.png

Pierwszy fragment tyczy się OR, drugi UNION
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Kiepskie masz te indeksy skoro widać jak wół, że ani razu nie zostały użyte.
Jak mówiłem: jak nie ma indeksów to UNION nigdy nie będzie szybsze bo zamiast jednego wolnego zapytania musi zrobić dwa wolne zapytania....
Go to the top of the page
+Quote Post

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: 22.12.2025 - 16:32