Az alábbi két lekérdezés ugyanazt az eredményt adja
vissza. De akkor mikor használjam ezt, és mikor
használjam azt. Mindegy, amnelyik szimpatikusabb?
Figyelt kérdés
1: SELECT Név, A_kifizetett_bér, A_levont_adóelőleg, A_kifizetés_dátuma FROM Dolgozó, Kifizetés WHERE Dolgozó.A_dolgozó_törzsszáma = Kifizetés.A_dolgozó_törzsszáma ORDER BY Név
2. SELECT Név, A_kifizetett_bér, A_levont_adóelőleg, A_kifizetés_dátuma FROM Dolgozó JOIN Kifizetés ON Dolgozó.A_dolgozó_törzsszáma = Kifizetés.A_dolgozó_törzsszáma ORDER BY Név
2017. jún. 24. 19:23
1/5 anonim válasza:
Az elsővel sokkal rosszabb teljesítményt érhetsz el. Ennek az az oka, hogy először veszi a két tábla Descartes-szorzatát (felírja a két tábla elemeinek összes létező kombinációját), majd ebből a hatalmas adathalmazból szűri ki a neked kellő eredményeket a WHERE után álló logikai kifejezésed alapján.
A második megoldásnál viszont már ésszel csinálja a gép. Mivel megadtad, hogy mi alapján kapcsolja össze a két tábla rekordjait, így nem kell kezdésnek legyártania az összes létező kombinációt.
Ez nyilván két 10 soros táblán nem látszik meg. Ellenben ha több millió soros tábláid vannak, amiken másodpercenként 50 ilyen lekérdezés fut le, az adatbázis-szervert térdre fogja kényszeríteni.
2017. jún. 24. 21:09
Hasznos számodra ez a válasz?
2/5 A kérdező kommentje:
Értem, nagyon köszönöm. Az ilyen emberekkel lehet haladni, aki egy értelmes kérdésre értelmes válasz tud adni. Megy a pontocska.
2017. jún. 24. 21:36
3/5 anonim válasza:
#1 Azért szögezzük le, ha többmilliós táblák vannak, és másodpercenként több mint 50 lekérdezés, akkor épeszű tervező nem tesz alá egy egyszerű SQL szervert.
2017. jún. 24. 22:12
Hasznos számodra ez a válasz?
4/5 anonim válasza:
Egyszerűt nem is, itt most a nagyvállalati SQL RDBMS-ekről van szó (Microsoft SQL Server, Oracle Database, IBM DB2, ...). Ezek vertikálisan skálázhatóak, ami azt jelenti, hogy csak úgy tudsz neki "több erőt adni", ha erősebb vasat veszel alá. Míg a NoSQL megoldások (pl. az Apache Cassandra) horizontálisan is skálázhatóak - azaz ha egynél több géped van, "össze tudnak dolgozni". Erre a hagyományos RDBMS-ek nem alkalmasak - lehet ugyanis több géped, de ebből mindig csak egy fog aktívan dolgozni, a többi pedig azért lesz ott, hogyha az egyik szerver kiesik, a másik átvehesse a helyét. Ez azért van, mert ezek az RDBMS rendszerek csak így tudják a nagyon erős konzisztenciát fenntartani. De ez nem jelenti azt, hogy mondjuk egy Microsoft SQL Server ne tudná kezelni a több millió soros táblákat másodpercenként 50 lekérdezéssel. Persze itt már észnél kell lenni, hogy ne kövessünk el olyan adatbázis-tervezési hibákat, amik a teljesítményt rontják (nem rakunk indexeket; vagy van egy NVARCHAR típusú mezőm és a lekérdezésbe CHAR típusú adatot rakok, ...), de hát ezért vagyunk szakemberek, nem?
2017. jún. 24. 22:26
Hasznos számodra ez a válasz?
5/5 anonim válasza:
"Az ilyen emberekkel lehet haladni, aki egy értelmes kérdésre értelmes válasz tud adni"
Tegyük hozzá, hogy azért igen ritkák itt az értelmes kérdések, mondjuk olyan 100ból 1.
A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik. Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!