Autor | Zpráva | ||
---|---|---|---|
aDAm Profil |
#1 · Zasláno: 7. 6. 2011, 09:11:38
Zdarvím, řeším teď optimalizaci sql dotazů které mají vnořené poddotazy a nevím které řešení je pro server výhodnější:
Mám tabulku třeba uživatelů a pak tabulku objednávek a diskuze. Když vypisuju uživatele tak chci vypsat kolik má objednávek a kolik poslal dotazů 1. Udělat select uživatelů a pak jednotlivé záznamy procházet a dělat selecty na dalších tabulkách a ty pak přidávat. 2. Udělat select na uživatele s vnořenými selecty které získají konkrétní počty. 3. Uděla pohledovou tabulku kde budou ty vnořené selecty aplikované a pak už jen dělat obyč selecty na ten pohled č.1 jsem zavrhl protože se tady nedá sortovat podle těch počtů, popřípadě filtrovat, takže se rozhoduju mezi 2 a 3. Způsob č.2 mám zatím implementován a vypadá ok, pokud je málo dat tak je svižný, ale jakmile je na db několik stovek záznamů tak už se ty dotazy neúměrně prodlužujou. Způsob č.3 jsem zatím vyzkoušel na malé tabulce tak nemám reálné porovnání s č.2 Je tedy některé z těchto řešení ok? Nebo jdu špatnou cestou a měly by ty dotazy vypadat jinak? |
||
okolojdouci Profil * |
#2 · Zasláno: 7. 6. 2011, 12:08:50
Lepší než vnořený select může být připojování tabulek joinem. Záleží na okolnostech. Ale stovky záznamů jsou zanedbatelné číslo, to musí fungovat bleskově. Jestli nefunguje, nejspíš ty dotazy konstruuješ špatně.
|
||
aDAm Profil |
#3 · Zasláno: 7. 6. 2011, 12:31:20
jo JOINem sem to někde dělal ale když se spojilo více tabulek (nějaké doplňkové info k uživateli) tak už to nebylo ono a v některých případech to nevrátilo korektní výsledek.
|
||
okolojdouci Profil * |
#4 · Zasláno: 7. 6. 2011, 12:35:06
aDAm:
Můžeme si tři dny povídat o tom, co je a co není dobré řešení. Nebo můžeš položit konkrétní otázku a dostat konkrétní odpověď. |
||
aDAm Profil |
#5 · Zasláno: 7. 6. 2011, 13:25:43
Konkrétní otázka snad byla pložena ne?
Prostě mám: SELECT ..data.. FROM user AS u LEFT JOIN user_info AS ui ON ui.user_id = u.user_id LEFT JOIN user_addres AS ua ON ua.user_id = u.user_id WHERE xy GROUP BY u.user_id LIMIT 0,50 dejme tomu že v tabulce uživatelů je 1000 záznamů, stejný počet v info a 2-3x víc v adrese tento dotaz ještě potřebuju rozšířit o počet objednávek a počet příspěvků v diskuzi. v objednavkach je třeba x tis záznamů a v diskuzi mnohem víc. |
||
Časová prodleva: 13 let
|
0