Autor | Zpráva | ||
---|---|---|---|
luma64 Profil |
#1 · Zasláno: 10. 9. 2012, 09:21:18
Zdravim, poradte pls, ak sa da a vseobecne plati.. Mam obludny selekt nad 7 tabulkami ; su to v podstate 2 datove a 5 ciselnikovych tabuliek.Selekt spustam z php. Tabulky su indexovane. Selekt sa vykona za cca 10 sekund. Co by ste mi mohli doporucit ? Dakujem.
|
||
mimochodec Profil |
#2 · Zasláno: 10. 9. 2012, 09:28:02
luma64:
„Co by ste mi mohli doporucit ?“ Abys ten dotaz ukázal. |
||
Jan Tvrdík Profil |
#3 · Zasláno: 10. 9. 2012, 09:35:22
luma64:
„Co by ste mi mohli doporucit ?“ V prvé řadě je dobré si zvyknout nepsat před otazník mezeru, protože tam nepatří. A v druhé řadě se koukni na EXPLAIN toho dotazu. Velmi pravděpodobně se ty indexy nepoužívají. |
||
luma64 Profil |
Ten sql posielam upraveny.
Select distinct(h.epiz),max(h.vynosy) as vynosy,sum(p.naklady) as naklady,h.epiz_id,r.skratka as nazovriadznak, h.kododd,s.nazov ,h.rc,h.meno, h.datzacplanhosp, (select min(m.datzachosp) from planovane m where m.epiz=p.epiz and m.skratka='$skratka') as datzachosp, (select max(m.datukonhosp) from planovane m where m.epiz=p.epiz and m.skratka='$skratka') as datukonhosp , t.typnazov, h.zp,h.typhosp, h.riadznak,h.dgprij From histpacient h , pzs s, oddelenia o, uzivatelia u , typhosp t, riadznak r, planovane p Where u.oddelenie='$dept_id' and u.oddelenie=o.id and h.kododd=s.kododd and h.kododd=p.kododd and (substr(h.datzacplanhosp,1,4) ='$rok' or substr(h.datzachosp,1,4) ='$rok' or substr(h.datukonhosp,1,4) ='$rok') and ( (substr(h.datzacplanhosp,6,2)='$mes_porcis' and h.datzachosp is null and h.datukonhosp is null) or (substr(h.datzacplanhosp,6,2)='$mes_porcis' and substr(h.datzachosp,6,2)='$mes_porcis' and substr(h.datukonhosp,6,2)='$mes_porcis') or (h.datzacplanhosp is null and (h.datzachosp is not null and convert(substr(h.datzachosp,6,2),UNSIGNED INTEGER)<$cismes+1) and h.datukonhosp is null) or (h.datzacplanhosp is null and h.datzachosp is not null and substr(h.datukonhosp,6,2)='$mes_porcis') or (h.datzacplanhosp is null and (h.datzachosp is not null and convert(substr(h.datzachosp,6,2),UNSIGNED INTEGER)<$cismes+1) and convert(substr(h.datukonhosp,6,2),UNSIGNED INTEGER)>$cismes) ) and h.riadznak=r.riadznak and s.skratka=o.skratka and o.skratka='$skratka' and u.id='$uziv_id' and h.typhosp=t.typskratka and h.epiz=p.epiz group by h.epiz Ten Explain poslat v akom tvare ? |
||
Jan Tvrdík Profil |
luma64:
Rovnou sem pošli i ten EXPLAIN + ten SQL dotaz můžeš prohnat nějakým zkrásňovačem, aby byl aspoň trochu čitelný. |
||
Kajman Profil |
#6 · Zasláno: 10. 9. 2012, 10:04:57
Pokud v nějakém sloupečku hledáte datumy z konkrétního měsíce, nepoužívejte pomalý substr nad sloupcem. Přepište to na něco jako
where sloupec>'2012-08-01' and sloupec <='2012-08-31' # doplnte 23:59:59, pokud tam je i cas |
||
luma64 Profil |
#7 · Zasláno: 10. 9. 2012, 10:10:36
Pouzil som link na formatovanie SQL ale v spodnom okne mi furt pisalo chybu: h(9,80) expected token:Unknown
|
||
peta Profil |
luma64: Zvol tam databazi mysql. A dej tam skutecny sql dotaz, ne s $rok z php. Do phpmyadminu pak dej tez ten dotaz a klikni na explain.
SELECT DISTINCT( h.epiz ), Max(h.vynosy) AS vynosy, Sum(p.naklady) AS naklady, h.epiz_id, r.skratka AS nazovriadznak, h.kododd, s.nazov, h.rc, h.meno, h.datzacplanhosp, (SELECT Min(m.datzachosp) FROM planovane m -- spatne, duplicitni m WHERE m.epiz = p.epiz AND m.skratka = '$skratka') AS datzachosp, (SELECT Max(m.datukonhosp) FROM planovane m -- spatne, duplicitni m WHERE m.epiz = p.epiz AND m.skratka = '$skratka') AS datukonhosp, t.typnazov, h.zp, h.typhosp, h.riadznak, h.dgprij FROM histpacient h, pzs s, oddelenia o, uzivatelia u, typhosp t, riadznak r, planovane p WHERE u.oddelenie = '$dept_id' -- spatne, php AND u.oddelenie = o.id AND h.kododd = s.kododd AND h.kododd = p.kododd AND ( Substr(h.datzacplanhosp, 1, 4) = '$rok' -- spatne, php OR Substr(h.datzachosp, 1, 4) = '$rok' -- spatne, php OR Substr(h.datukonhosp, 1, 4) = '$rok' ) -- spatne, php AND ( ( Substr(h.datzacplanhosp, 6, 2) = '$mes_porcis' -- spatne, php AND h.datzachosp IS NULL AND h.datukonhosp IS NULL ) OR ( Substr(h.datzacplanhosp, 6, 2) = '$mes_porcis' -- spatne, php AND Substr(h.datzachosp, 6, 2) = '$mes_porcis' -- spatne, php AND Substr(h.datukonhosp, 6, 2) = '$mes_porcis' ) -- spatne, php OR ( h.datzacplanhosp IS NULL AND ( h.datzachosp IS NOT NULL AND CONVERT(Substr(h.datzachosp, 6, 2), UNSIGNED INTEGER) <$cismes -- spatne, php + 1 ) AND h.datukonhosp IS NULL ) OR ( h.datzacplanhosp IS NULL AND h.datzachosp IS NOT NULL AND Substr(h.datukonhosp, 6, 2) = '$mes_porcis' ) -- spatne, php OR ( h.datzacplanhosp IS NULL AND ( h.datzachosp IS NOT NULL AND CONVERT(Substr(h.datzachosp, 6, 2), UNSIGNED INTEGER) <$cismes -- spatne, php + 1 ) AND CONVERT(Substr(h.datukonhosp, 6, 2), UNSIGNED INTEGER) >$ cismes ) ) AND h.riadznak = r.riadznak AND s.skratka = o.skratka AND o.skratka = '$skratka' -- spatne, php AND u.id = '$uziv_id' AND h.typhosp = t.typskratka AND h.epiz = p.epiz GROUP BY h.epiz |
||
luma64 Profil |
#9 · Zasláno: 10. 9. 2012, 10:56:02 · Upravil/a: Moderátor (editace znemožněna) 10. 9. 2012, 12:31:47
Na tom linku som nakopiroval so clipboardu vygenerovany select a potom som formatovany select nakopiroval do phpmyadmin a spustil :
Explain SELECT DISTINCT( h.epiz ), Max(h.vynosy) AS vynosy, Sum(p.naklady) AS naklady, h.epiz_id, r.skratka AS nazovriadznak, h.kododd, s.nazov, h.rc, h.meno, h.datzacplanhosp, (SELECT Min(m.datzachosp) FROM planovane m WHERE m.epiz = p.epiz AND m.skratka = 'ALG') AS datzachosp, (SELECT Max(m.datukonhosp) FROM planovane m WHERE m.epiz = p.epiz AND m.skratka = 'ALG') AS datukonhosp, t.typnazov, h.zp, h.typhosp, h.riadznak, h.dgprij FROM histpacient h, pzs s, oddelenia o, uzivatelia u, typhosp t, riadznak r, planovane p WHERE u.oddelenie = '6' AND u.oddelenie = o.id AND h.kododd = s.kododd AND h.kododd = p.kododd AND ( Substr(h.datzacplanhosp, 1, 4) = '2012' OR Substr(h.datzachosp, 1, 4) = '2012' OR Substr(h.datukonhosp, 1, 4) = '2012' ) AND ( ( Substr(h.datzacplanhosp, 6, 2) = '08' AND h.datzachosp IS NULL AND h.datukonhosp IS NULL ) OR ( Substr(h.datzacplanhosp, 6, 2) = '08' AND Substr(h.datzachosp, 6, 2) = '08' AND Substr(h.datukonhosp, 6, 2) = '08' ) OR ( h.datzacplanhosp IS NULL AND ( h.datzachosp IS NOT NULL AND CONVERT(Substr(h.datzachosp, 6, 2), UNSIGNED INTEGER) < 8 + 1 ) AND h.datukonhosp IS NULL ) OR ( h.datzacplanhosp IS NULL AND h.datzachosp IS NOT NULL AND Substr(h.datukonhosp, 6, 2) = '08' ) OR ( h.datzacplanhosp IS NULL AND ( h.datzachosp IS NOT NULL AND CONVERT(Substr(h.datzachosp, 6, 2), UNSIGNED INTEGER) < 8 + 1 ) AND CONVERT(Substr(h.datukonhosp, 6, 2), UNSIGNED INTEGER) > 8 ) ) AND h.riadznak = r.riadznak AND s.skratka = o.skratka AND o.skratka = 'ALG' AND u.id = '21' AND h.typhosp = t.typskratka AND h.epiz = p.epiz GROUP BY h.epiz ORDER BY h.rc, h.epiz, h.epiz_id Vysledok je 9 zaznamov. Co s nimi ? Apropo radsej pouzivam Mysql QueryBrowser. |
||
mimochodec Profil |
#10 · Zasláno: 10. 9. 2012, 11:08:45
luma64:
Doporučuju víc pozornosti věnovat příspěvkům Kajmana, naopak peta je něco, co lze bez větší újmy ignorovat. |
||
Jan Tvrdík Profil |
#11 · Zasláno: 10. 9. 2012, 12:14:45
luma64:
„Vysledok je 9 zaznamov. Co s nimi ?“ Ukázat nám je. Obsahují informace o tom, co MySQL musí udělat pro vyhodnocení toho dotazu. |
||
peta Profil |
#12 · Zasláno: 10. 9. 2012, 14:36:43
mimochodec: Mohl bych vedet, co neni v mem prispevku v chybne? Protoze uplne shodne muzu okomentovat tvuj prispevek.
|
||
mimochodec Profil |
#13 · Zasláno: 10. 9. 2012, 14:55:03
peta:
„mimochodec: Mohl bych vedet, co neni v mem prispevku v chybne? Protoze uplne shodne muzu okomentovat tvuj prispevek.“ Řekněme, že navzdory tvým vyjadřovacím schopnostem chápu, na co ses asi chtěl zeptat, takže můžu odpovědět: nimráš se v detailech, odbíháš od podstaty. |
||
luma64 Profil |
#14 · Zasláno: 10. 9. 2012, 15:29:08
peta:
ako ti to poslem? v akom tvare ? Ktore polia ? |
||
Časová prodleva: 12 let
|
0