Keresés mysql view-ban
Sziasztok,
Lenne egy kérdésem hozzátok. Van 3 különböző táblám egy csoportban ( tagok adatai,
tagok előfizetései, tagok képei ). Ezek összességéből kb 9 oszlop az ami adja a lekérdezéseim ( amik erre vonatkoznak ) 80% -át. Ezért készítettem ezeknek egy view táblát, megspórolva a join -okat, ami tartalmazza a 3 tábla szükséges sorait plusz 1-2 származtatott adatot. Viszont nem az egész táblát hívom le, a lekérdezéseknek is van 1 - 2 feltétele, szűrni kell a találatokat város szerint, előfizetés típusa szerint stb. Szinte mindegyik mező alapján érkezne feltétel.
Mennyire alkalmas a view -erre? Illetve mennyire jó egyáltalán ez az elképzelés?
Esetleg érdemesebb lenne minden feltételnek megfelelően egy view -t készíteni?
Köszi.
Üdv!
■ Lenne egy kérdésem hozzátok. Van 3 különböző táblám egy csoportban ( tagok adatai,
tagok előfizetései, tagok képei ). Ezek összességéből kb 9 oszlop az ami adja a lekérdezéseim ( amik erre vonatkoznak ) 80% -át. Ezért készítettem ezeknek egy view táblát, megspórolva a join -okat, ami tartalmazza a 3 tábla szükséges sorait plusz 1-2 származtatott adatot. Viszont nem az egész táblát hívom le, a lekérdezéseknek is van 1 - 2 feltétele, szűrni kell a találatokat város szerint, előfizetés típusa szerint stb. Szinte mindegyik mező alapján érkezne feltétel.
Mennyire alkalmas a view -erre? Illetve mennyire jó egyáltalán ez az elképzelés?
Esetleg érdemesebb lenne minden feltételnek megfelelően egy view -t készíteni?
Köszi.
Üdv!
View
Wikipedia – alátámasztja, amit írtam.
Ha erre nincs szükséged, akkor szerintem csak overhead-et okoz egy egyszerű SELECT-hez képest.
Ezek alapján jött az ötlet:
Hasznos lenne nekem ez a megoldás csak nem tudom, hogyan viselkedik élőben, de én is úgy érzem hogy kicsit sántít. Olvasgatok még egy kicsit... :)
Nem vagyok jártas MySQL-ben,
Lassú a SELECT?
Csak azért kérdem, mert ahhoz min. 10^6 nagyságrendű rekord kell, vagy vmi mást elrontottál. Itt felhasználókról írsz, azok száma (és csatolt részeiké) ritkán több néhány 100000-nél. Tehát jónak kéne lennie view nélkül. Csak gondolom, hogy MySql-nél beállításoktól függ, hogy hogy kezeli a view-t. Ha spórolni akarsz (időt) akkor mindenképp a feltételek szerinti több view lesz a megoldás. Viszont nem tudom, hogy a view táblák hol és hogyan tárolódnak, mi van, ha nem férnek el RAM-ban. Félek akkor még lassabbra is kijöhet a vége, mint néhány join-al.
Egyszer belefutottam abba a
Meg ami mindenképpen megfondolandó az az, hogy az összes join on feltételben szereplő mezőknek legyen indexe, illetve a where feltételben érintett mezőkkel is érdemes kisérletezni ily módon.
deejayy:
Hm.. de igazából egyikőtök sem igazán buzdít rá, hogy ez egy jó ötlet lenne.
Materialised views
http://code.google.com/p/flexviews/
Én első körben inkább egyéb
Pár tíz-, százezres tábláknál nem biztos, hogy jó ötlet, mert bizonyos lekérdezéseket gyorsít, más műveleteket meg jelentősen lassíthat.
Az lehet, hogy nem
A view-k szerintem hasznos dolgok.
Köszönöm mindenkinek!
Hogyan érdemes mérni? Explain -el a lekérdezést és a php -val együtt külön a komplett folyamatokat? Milyen módszerekkel érdemes?
Még egyszer köszi mindenkinek a rám szánt idejét!
Nem biztos
Nem jut eszembe konkrétan, de biztos van mysql fv., amivel egyszerűen megtudhatod a legutóbbi lekérdezés idejét. Ha több lekérdezés van egy folyamatban, akkor mind után kérdezd le, add össze, stb. Legtöbbször a legegyszerűbb a legjobb. Mérheted a php futásidőt is, ebből levonod a mysql-t, az a "tiszta" php idő.
Jól gondolod.
Nincs nálam könyv, így csak kérdezem: view-nak nem lehet véletlenül indexeket létrehozni? Az lenne a jó megoldás, már ha kell view.
Oracle.
Nem teszteltem