<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=InfMenZhNagyFeladat</id>
	<title>InfMenZhNagyFeladat - Laptörténet</title>
	<link rel="self" type="application/atom+xml" href="https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=InfMenZhNagyFeladat"/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=InfMenZhNagyFeladat&amp;action=history"/>
	<updated>2026-05-16T16:02:51Z</updated>
	<subtitle>Az oldal laptörténete a wikiben</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://vik.wiki/index.php?title=InfMenZhNagyFeladat&amp;diff=139160&amp;oldid=prev</id>
		<title>Unknown user: Új oldal, tartalma: „{{GlobalTemplate|Infoszak|InfMenZhNagyFeladat}}  ==Feladat==  Szamitsa ki az indexalapu egymasba agyazott hurok (indexed nested loop) modszerrel vegrehajtott join kolts…”</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=InfMenZhNagyFeladat&amp;diff=139160&amp;oldid=prev"/>
		<updated>2012-10-21T20:34:27Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „{{GlobalTemplate|Infoszak|InfMenZhNagyFeladat}}  ==Feladat==  Szamitsa ki az indexalapu egymasba agyazott hurok (indexed nested loop) modszerrel vegrehajtott join kolts…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Új lap&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{GlobalTemplate|Infoszak|InfMenZhNagyFeladat}}&lt;br /&gt;
&lt;br /&gt;
==Feladat==&lt;br /&gt;
&lt;br /&gt;
Szamitsa ki az indexalapu egymasba agyazott hurok (indexed nested loop)&lt;br /&gt;
modszerrel vegrehajtott join koltseget, ha elsodleges B* fa stukturaju&lt;br /&gt;
indexeket hasznaltunk a join attributumok szerinti rekordeleresre! A&lt;br /&gt;
blokkmeret 4000 byte. Melyik relacio legyen kulso hurokban? Hanyszoros&lt;br /&gt;
valaszidot kapunk, ha az optimalizacio rosszul dont? Mivaltozik ha csak&lt;br /&gt;
masodlagos (B* fa) index letezik join attributumokra?&lt;br /&gt;
&lt;br /&gt;
  * 1. relacio: 12.000 rekord, rekordhossz: 330 byte, 6 byte-os kulcs, 4 byte-os mutato&lt;br /&gt;
  * 2. relacio: 150.000 rekord, rekordhossz: 100 byte, 10 byte-os kulcs, 4 byte-os mutato&lt;br /&gt;
&lt;br /&gt;
A feladat megoldásához pontosan kell tudni, hogy mi a különbség az&lt;br /&gt;
elsődleges és a másodlagos index között. Elsődleges index: Fizikailag&lt;br /&gt;
rendezett adatbázist jelent. Minden egyes új rekordot a megfelelő helyre&lt;br /&gt;
szúrunk be.&lt;br /&gt;
Másodlagos index: Felépítünk egy B*-fát mely a csomópontjaiban&lt;br /&gt;
(kulcs,mutató) párokat tartalmaz. Új rekord beszúrásakor a&lt;br /&gt;
(kulcs,mutató) párokat módosítjuk.&lt;br /&gt;
&lt;br /&gt;
==Megoldás==&lt;br /&gt;
&lt;br /&gt;
===Elsődleges index algoritmus===&lt;br /&gt;
&lt;br /&gt;
Ha elsődleges indexet használunk, akkor csak egyszer kell végigolvasni a&lt;br /&gt;
relációk rekordjait, mert fizikailag rendezve vannak.&lt;br /&gt;
&lt;br /&gt;
Vegyük az &amp;#039;A&amp;#039; reláció első rekordját és addig olvassuk a&lt;br /&gt;
&amp;#039;B&amp;#039; reláció rekordjait, amíg nem találunk egyezést. Ezután beolvassuk a&lt;br /&gt;
következő rekordot az &amp;#039;A&amp;#039; relációból és a &amp;#039;B&amp;#039; relációból is. (Mivel&lt;br /&gt;
fizikailag rendezve van mindkét reláció, ezért biztosak lehetünk abban,&lt;br /&gt;
hogy az &amp;#039;A&amp;#039; reláció következő rekordja nem szerepelhet a &amp;#039;B&amp;#039; reláció&lt;br /&gt;
utoljára beolvasott rekordja előtt). A következő egyezés után ismét&lt;br /&gt;
vesszük az &amp;#039;A&amp;#039;&lt;br /&gt;
reláció következő rekordját és a &amp;#039;B&amp;#039; reláció következő rekordját. Ezt&lt;br /&gt;
addig folytatjuk amíg végig nem olvastunk az egyik relációt.&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; &amp;#039;&amp;#039;ezt a módszert nem Sorted Merge Join-nak hívják? az ugye nem azonos a Nested loop join-nal??&amp;#039;&amp;#039;  -- Habib &amp;lt;/span&amp;gt; ====&lt;br /&gt;
A nested loop-nál nincs kikötve, hogy a második reláció rendezve legyen, de most rendezve van. Ugyanakkor a Nested loop az lenne, hogy az index segítségével érjük el a második relációt. szerintem.&lt;br /&gt;
&lt;br /&gt;
===Válasz===&lt;br /&gt;
&lt;br /&gt;
A join költsége az &amp;#039;A&amp;#039; és a &amp;#039;B&amp;#039; reláció blokkjainak a száma.&lt;br /&gt;
Ebből látszik hogy itt mindegy hogy melyik reláció van a külső hurokban.&lt;br /&gt;
A válaszidő mindkét esetben ugyanaz.&lt;br /&gt;
&lt;br /&gt;
///&lt;br /&gt;
*gondolom ez nem igaz, mert a jegyzetben az indexed nested loop join költségére a képlet:&lt;br /&gt;
br * nr * c (ahol: c - a belső indexelt reláció kiválasztási költsége br / nr a külső reláció blokkszáma/rekordszáma)*&lt;br /&gt;
///&lt;br /&gt;
&lt;br /&gt;
===Számolás===&lt;br /&gt;
&lt;br /&gt;
E = Ba + Bb	(ahol B a blokkszám, E a költség)&lt;br /&gt;
&lt;br /&gt;
Ki kell számolni, hogy az egyes relációk rekordjai hány blokkban fognak&lt;br /&gt;
elférni.&lt;br /&gt;
A blokkméret 4000 byte.&lt;br /&gt;
Ezért az első relációnál egy blokkban 4.000/300 egészrésze, vagyis 13&lt;br /&gt;
rekord fér el.&lt;br /&gt;
A második relációnál 4.000/100 egészrésze, vagyis 40 rekord fér el.&lt;br /&gt;
==&amp;gt; az első reláció 12.000/13 felső egészrésze : 924 blokk -ban fér el.&lt;br /&gt;
A második reláció 150.000 / 40 felső egészrésze = 3750 blokkban fér el&lt;br /&gt;
==&amp;gt; a teljes költség 3750 + 924 = 4674 blokk olvasás.&lt;br /&gt;
&lt;br /&gt;
===Másodlagos index algoritmus===&lt;br /&gt;
&lt;br /&gt;
Ha másodlagos indexet használunk, akkor egy kicsit bonyolultabb a&lt;br /&gt;
helyzet.&lt;br /&gt;
&lt;br /&gt;
Itt egy B* fában tárolunk (kulcs,mutató) párokat, amelyek alapján&lt;br /&gt;
eljutunk a levelekben tárolt rekordokhoz. Ehhez legalább annyi blokkot&lt;br /&gt;
kell beolvasni, mint amennyi a B* fa szintjeinek a száma. Ezért meg kell&lt;br /&gt;
határozni a B*-fa szintjeinek a számát. Mivel megadták a (kulcs,mutató)&lt;br /&gt;
párok méretét, ezért ki tudjuk számolni, hogy egy blokkba hány ilyen pár&lt;br /&gt;
fér el (F). Egy csomópontból (vagyis blokkból) ennyi él fog kifelé mutatni.  A blokkok (B) és mutatók (F) számból meg lehet határozni a&lt;br /&gt;
B*- fa szintjeinek a számát (HT-t) a következő képlettel. HT = log_F (B) =&lt;br /&gt;
ln(B)/ln(F) (áttérés új alapra) egészrész (ne felejtsük el hogy egy mutató nem egy rekordra,&lt;br /&gt;
hanem egy blokkra mutat ezért ln(B)/ln(F) nem pedig ln(R)/ln(F)). A Join&lt;br /&gt;
költsége a külső reláció blokkszáma (Bk) + belső reláció kiválasztásának&lt;br /&gt;
költsége (HTb + 1) * a külső reláció rekordszámával.&lt;br /&gt;
E = Bk + nk* (HTb + 1)&lt;br /&gt;
(ahol  Bk: külső reláció blokkszáma / HTb: belső (és rendezett) Reláció&lt;br /&gt;
másodlagos index B*-fa szintjeinek a száma&lt;br /&gt;
nk: külső reláció rekordjainak a száma)&lt;br /&gt;
&lt;br /&gt;
Ezt a költséget meg kell határozni mind a két esetben és a kisebbet kell&lt;br /&gt;
kiválasztani. Ezek után pedig meg kell határozni a kettő költség&lt;br /&gt;
hányadosát.&lt;br /&gt;
&lt;br /&gt;
===Számolás===&lt;br /&gt;
&lt;br /&gt;
Tudjuk hogy:&lt;br /&gt;
* az első relációban a blokkok száma : 924&lt;br /&gt;
* a második relációban a blokkok száma : 3750&lt;br /&gt;
&lt;br /&gt;
Az első relációnál egy blokkba 4000 / (6 + 4) = 400 (mutató,kulcs) pár&lt;br /&gt;
fér el.&lt;br /&gt;
A második relációnál egy blokkba 4000 / (10 + 4) egészrésze = 286&lt;br /&gt;
(mutató,kulcs) pár fér el.&lt;br /&gt;
&lt;br /&gt;
A szintek száma:&lt;br /&gt;
* Az első relációban: ln(924)/ln(400) egész része = 1&lt;br /&gt;
* A második relációban ln(3750)/ln(286) egész része = 1&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; &amp;#039;&amp;#039;Amikor valaminek az egész részét veszed, akkor pont elhagysz valamennyi információt, tehát kimarad valami a fából, vagy tévedek? Itt nem pont felső egészt kéne venni?&amp;#039;&amp;#039;  -- Habib &amp;lt;/span&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
Ha az első reláció a külső&lt;br /&gt;
E1 = 924 + 12.000 * (1+ 1) = 24.924&lt;br /&gt;
&lt;br /&gt;
Ha a második reláció a külső&lt;br /&gt;
E2 = 3750 + 150.000 * (1+ 1) = 303.750&lt;br /&gt;
&lt;br /&gt;
===Válasz a feladatra===&lt;br /&gt;
&lt;br /&gt;
Az első reláció legyen a külső hurokban, ha az optimalizáló&lt;br /&gt;
rosszul dönt, akkor E2/E1 = 303.750 / 24.924 ~ 12 szeres válaszidőt&lt;br /&gt;
kapunk.&lt;br /&gt;
&lt;br /&gt;
-- Iwatt Róbert, info2002 - 2006.12.03.&lt;br /&gt;
&lt;br /&gt;
-- [[PallosPeter|Peti]] - 2006.12.04.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Infoszak]]&lt;/div&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
</feed>