Optimalizace MySQL dotazu
Napsal: 29 srp 2011 14:47
Ahoj. Potřeboval bych poradit s optimalizací SQL dotazu. Mám dvě tabulky v jedné jsou články v druhé historie.
První tabulka články:
1 (id), Test (název)
v druhé mám historii:
1 (id), 1 (idclanku), 50 (udalost)
2 (id), 1 (idclanku), 100 (udalost)
3 (id), 1 (idclanku), 150 (udalost)
4 (id), 2 (idclanku), 50 (udalost)
5 (id), 2 (idclanku), 150 (udalost)
No a já potřebuju seznam přečtených a nepřečtených článků. Přečtené mám vyřešený:
SELECT clanek.nazev FROM clanek JOIN historie ON clanek.id=historie.idclanku WHERE historie.udalost=100 GROUP BY clanek.id ORDER BY clanek.id
Horší to je s nepřečtenejma, jelikož kdybych dal podmínku historie.udalost<>100, tak se mi tam dostane i článek 2, jelikož má i událost 50
Zatim to mám takhle, ale je to dost pomalý:
SELECT clanek.nazev FROM clanek
WHERE NOT EXISTS (SELECT id FROM historie WHERE clanek.id=historie.idclanku AND udalost=100))
Díky za radu,
Jarda
První tabulka články:
1 (id), Test (název)
v druhé mám historii:
1 (id), 1 (idclanku), 50 (udalost)
2 (id), 1 (idclanku), 100 (udalost)
3 (id), 1 (idclanku), 150 (udalost)
4 (id), 2 (idclanku), 50 (udalost)
5 (id), 2 (idclanku), 150 (udalost)
No a já potřebuju seznam přečtených a nepřečtených článků. Přečtené mám vyřešený:
SELECT clanek.nazev FROM clanek JOIN historie ON clanek.id=historie.idclanku WHERE historie.udalost=100 GROUP BY clanek.id ORDER BY clanek.id
Horší to je s nepřečtenejma, jelikož kdybych dal podmínku historie.udalost<>100, tak se mi tam dostane i článek 2, jelikož má i událost 50
Zatim to mám takhle, ale je to dost pomalý:
SELECT clanek.nazev FROM clanek
WHERE NOT EXISTS (SELECT id FROM historie WHERE clanek.id=historie.idclanku AND udalost=100))
Díky za radu,
Jarda