Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno SQL dotaz

Zdravím, potřeboval bych optimalizovat SQL dotaz, ale nemám představu jak přesně...

Zadání: Potřebuji z tabulky níže vybrat řádky, které jsou nejnovější k hodnotě key_id, ale přitom daný řádek má status = 1

id	key_id	tstamp		status
----------------------------------
9	1	1412067222	1
8	2	1412067174	2
7	4	1412067126	2
6	4	1412067078	1
5	2	1412067030	2
4	3	1412066982	1
3	2	1412066934	1
2	1	1412066886	2
1	3	1412066838	1

Výstup by pak měl vypadat takto:

id	key_id	tstamp		status
----------------------------------
9	1	1412067222	1
4	3	1412066982	1

Současný dotaz vypadá takto:

SELECT * FROM tabulka as t 
WHERE t.tstamp >= (SELECT max(tstamp) FROM tabulka WHERE key_id	= t.key_id)
AND t.status=1

Jelikož mám v tabulce skoro 500 000 záznamů, tak tento dotaz trvá na mém serveru kolem 4 vteřin.
Děkuji za pomoc

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
skus takto: create view v_docasne as select key_id, max(tstamp) tstamp from tabulka group by status…
wam_Spider007 30.09.2014 14:25
wam_Spider007
Presne takýmto spôsobom by som to riešil. Len by som nevytváral view, ale by som to dal rovno do toh… poslední
los 30.09.2014 22:50
los

skus takto:

create view v_docasne
as
select key_id, max(tstamp) tstamp from tabulka group by status;

select t.id, t.key_id, t.tstamp, t.status
from tabulka t
inner join v_docasne v on v.key_id = t.key_id and v.tstamp = t.tstamp
where t.status = 1;

Zpět do poradny Odpovědět na původní otázku Nahoru