![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 90 Pomógł: 0 Dołączył: 2.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
witam,
mam sklep na osc gold i muli mi strasznie serwer na nim...administratorzy napisali, że jest nieoptymalne zapytanie takie:
i ze zoptymalizowanie tego zapytania rozwiąże problem... Jak zaoptymalizować to zapytanie? Z góry dziękuję i pozdrawiam! |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
Można by pokombinować z union all o ile da rade.Czytałem gdzieś, że union jest wydatniejszy niż złączenia join.
Zobacz na ten link-może pomoże: http://stackoverflow.com/questions/3374459...joins-just-suck Ten post edytował Niktoś 19.03.2012, 16:55:28 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 341 Pomógł: 40 Dołączył: 23.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
union?
o ile pamietam to jedynie przy OR robi roznice (poza tym jak chcesz wtedy polaczyc tabele...?) join jest ok. mysql lepiej sobie z tym poradzi niz z union sprawdz explainem, czy masz pozakladane potrzebne indeksy. to po pierwsze, jesli nie osiagniesz zadowalajacych rezyltatow - sprobuj profilowania. tam znajdziesz waskie gardlo zapytania. ja osobiscie sprobowalbym dodatkowo ten kawalek kodu:
po pierwsze - sprawdz jakiego typu sa te kolumny, jesli sa numeryczne - wywal cudzyslowy, (tak - musisz dokonac konwersji typu, niby nie wiele, ale zawsze wolniej) sprawdzilbym tez ta operacje na datach, nie wiem jakiego masz typu kolumny, jesli jest to jakas forma stringa - to moze warto by bylo przekonwertowac. to takie pierwsze pomysly, od czego bym zaczynal. no, i zastanowilbym sie czy koniecznie jest mi potrzebne sprawdzanie produktow z ostatnich 3 tygodni.... moze wystarczyl by limit?? j. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
Zobacz na link, który podałem,nawet są tam przykłady z kwerendami podobnymi do tych co autor tematu przedstawił.Z ich testów wynika ,że użycie Union All znacznie przyspieszyło operacje na bazie.
Ten post edytował Niktoś 19.03.2012, 17:02:36 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 341 Pomógł: 40 Dołączył: 23.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
oczywiscie, tak jak napisalem, roznica jest gdy uzywasz OR
zauwaz, ze w linku ktory podales - nie zrezygnowano z JOIN, tylko z OR |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
Cytat roznica jest gdy uzywasz OR Przy operatorze AND już nie?Spójrz na linie 6 w kwerendzie autora. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 702 Pomógł: 65 Dołączył: 16.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
wklej EXPLAIN zapytania
-------------------- Nie udzielam pomocy poprzez PW
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 341 Pomógł: 40 Dołączył: 23.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
Chodziło mi o kwerendę autora tego tematu,nie o tamtą stronę
![]() LEFT JOIN categories c ON c.categories_id = p2c.categories_id WHERE c.categories_status='1' AND p.products_status = '1' AND pd.language_id = '1' AND DATE_SUB(CURDATE(),INTERVAL 21 DAY) <= p.products_date_added LIMIT 1 Piszesz ,że or robi różnice a and już nie co jest to dla mnie zastanawiające. Ten post edytował Niktoś 19.03.2012, 17:41:49 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 387 Pomógł: 66 Dołączył: 31.03.2005 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
Zobacz na link, który podałem,nawet są tam przykłady z kwerendami podobnymi do tych co autor tematu przedstawił.Z ich testów wynika ,że użycie Union All znacznie przyspieszyło operacje na bazie. ![]() ![]() Join powinien dać radę - tutaj nie widze nic nienormalnego w twoim zapytaniu oprócz jak już mój przedmówca zauważył '1' - to powinno być numeryczne. Poza tym w tym wypadku powinieneś, ba nawet bardzo powinieneś pozakładać klucze obce - w mysql działają w silniku inno db - w myisam już nie, niestety. -------------------- ..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 341 Pomógł: 40 Dołączył: 23.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
hmm ok, ale tutaj AND juz nie robi roznicy.
poszukaj sobie w necie OR vs UNION znajdziesz tego mutlum, jak dobrze poszukasz to bedzie opisane nawet dlaczego :] edit: nie chce robic posta pod postem. de facto wydaje mi sie ze jesli wywalisz sprawdzenie odnosnie daty - powinno znaczaco przyspieszyc. zastanawia mnie LIMIT 1 tak jest zbudowane owo zapytanie? czy tez po drodze ktos dokleil? Ten post edytował alegorn 20.03.2012, 12:03:46 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 23:15 |