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) |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%)
|
No to spróbuj na UNION ALL-a zobaczysz różnice.
Ten post edytował Niktoś 22.03.2012, 14:17:44 |
|
|
|
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 |
|
|
|
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. |
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%)
|
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 |
|
|
|
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. |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%)
|
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.
|
|
|
|
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. |
|
|
|
Post
#9
|
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%)
|
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) |
|
|
|
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 |
|
|
|
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.... |
|
|
|
![]() ![]() |
|
Aktualny czas: 22.12.2025 - 16:32 |