![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 27.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
mam taka baze danych:
products - pola: id,active(enum),deleted(enum), + kilka innych pol ale akurat tu nie uzywanych products_contents - pola: pro_id(relacja do products.id),name(varchar(150), + kilka innych pol ale akurat tu nie uzywanych w tym content(text z fullsearch)) produktow jakies 200k i baza ciagle rosnie robie prostego joina explain select * from products join products_contents on pro_id = id where active ='1' and deleted = '0' Limit 10 wszystko super smiga az milo, w extra mam tylko: "using where) problem pojawia sie wylacznie przy sortowaniu czyli: explain select * from products join products_contents on pro_id = id where active ='1' and deleted = '0' order by name asc Limit 10 smiga troche gorzej no i tworzy mase tymczasowych tabel (probowalem juz zamieniac kolejnosciami products z products_contents i dziala to tylko wtedy gdy nie mam where dla products).. przez co admin mnie sie czepia, dodatkowo w extra mam: Using where; Using temporary; Using filesort ktos ma jakis pomysl jak to zoptymalizowac ? przychodza mi do glowy dwa rozwiazania ale kazde ma jakies tam wady: 1. polaczyc obie tabele w jedna 2. skopiowac kolumny active i deleted do products_contents i w tym jednym przypadku korzystac wylacznie z products_contents 3. przeniesc name do tabeli products - chyba najlepsze rozwiazanie 4. ktos z na jakies inne ? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 702 Pomógł: 65 Dołączył: 16.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
pokaż może strukturę tabel ,a te tabele 'tymczasowe" to czasem nie widoki ?
-------------------- Nie udzielam pomocy poprzez PW
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 27.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
nie, korzystam ze zwyklych tabel, widoki co prawda sa stworzone dla tych tabel ale sa uzywane zupelnie gdzie indziej
struktury niestety nie bardzo moge pokazac ;/ jeszcze zauwazylem pewna rzecz... jak dam samo where deleted ='0' to korzysta tylko z where (juz bez tymczasowych tabel) a jak dam samp active = '1' to korzysta ze wszystkiego czyli Using where; Using temporary; Using filesort dziwne, bo obie kolumny maja zalozone oddzielnie kazdy index + jeden index laczacy je dwie |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 341 Pomógł: 40 Dołączył: 23.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
korzystajac z order by wymuszasz niejako stosowanie tabel tymczasowych.
zastanow sie czy to sortowanie jest ci tutaj koniecznie potrzebne. byc moze odpowiednie zastosowanie indeksow pozwolilo by ci wyeliminowac potrzebe sortowania - ale tutaj to juz potrzeba by bylo posprawdzac strukture tabeli, sprawdzic baze.. (to tez dotyczy tego pola 'active' masz na ty index?) jesli nie masz innej mozliwosci, zastanow sie jak czesto to wykorzystujesz w aplikacji (w sensie dane z tego query) jesli jest to wielokrotne - pomysl czy nie bylo by lepiej przeorganizować strukturę tabel, lub tez, czy lepiej bedzie JAWNIE utworzyc tabele tymczasowa i to z niej korzystac. jesli nie da sie inaczej - spróbuj ograniczyc liczbe rekordow, tabele tymczasowe, poki nie musza byc zapisywane na dysk - nie sa czasochlonne (co nie oznacza ze nie pozera zasobow) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 27.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
posprawdzalem indexy wszedzie jest ok..
co do tabel tymczasowych stworzonych przezemnie poprobuje Ten post edytował suli 27.02.2012, 14:42:20 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 11:40 |