queries – dva dotazy na db

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
qteck
Člen | 164
+
0
-

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.

David Matějka
Moderator | 6445
+
0
-

return $this->findAll()->select('id, title, text')->where('id',1);

enumag
Člen | 2118
+
0
-

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
+
0
-

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)