queries – dva dotazy na db
- qteck
- Člen | 164
ahoj,
všimli jste si , že když pokládáte dotaz typu:
return $this->findAll()->where(‚id‘,1);
že se pokládají dva dotazy (při prvním načtení stránky)?
SHOW FULL COLUMNS
FROM article
–
SELECT *
FROM article
WHERE (id
= ?)
po refreshy už to vypadá takto:
SELECT id
, title
, text
FROM article
WHERE (id
= ?)
existuje nějaká možnost jak tyto sloupce vymezit už při pokládání prvního dotazu, aby se předešlo tomu zjišťování při prvním načítání?
Díky.
- enumag
- Člen | 2118
Lze.
$this->findAll()->select('sloupec1, sloupec2')->where('id', 1);
Tohle chování je ale feature Nette. Dost programátorů když neví jistě které sloupce budou potřebovat píšou všude jednoduše *, což je ale poměrně špatné pro výkon. Jde prostě o lenost vývojářů to vypisovat a každou chvíli upravovat když potřebují něco jiného. Nette funguje tak, že si poprvé zjistí, které sloupce byly opravdu využity a později tahá už jen ty potřebné. Nemusíš se o nic starat a přesto to až na ten první dotaz bude optimalizované pro výkon.
- qteck
- Člen | 164
stejně pořád pokládá
SHOW FULL COLUMNS
FROM article
potom už sice nepadá * ale ale už specifikovaná pole, každopádáně namísto 0.828 je to díky prvnímu dotazu 3.929
což je ale zanedbatelné, otázkou však je jak se to bude chovat a jakej čas to zabere při selektu většího obsahu dat..
--
jinak samozřejmě díky za reakce.
Editoval qteck (15. 11. 2012 13:00)