A választás a közbenső feljegyzések az eredmény meg - vásárolni oracle, oracle ár - szoftverek
By the way, minden érdekelt szeretném tájékoztatni Önöket, hogy a mai napon a fordítás a második részben a könyv Tom Kite „Expert egy-egy Oracle” vége. Legutóbbi alkalmazás fájlok ma reggel küldött a kiadónak.
Hogyan lehet előállítani eredmények oldalon?
Szeretném letölteni az adatokat a kapcsolat létrejötte után a három asztal, és a rendezés néhány területen. Mivel ez a lekérdezés körülbelül 100 bejegyzés, szeretném megosztani az eredmény meg 4 részre, egyenként 25 bejegyzést. És szeretnék felsorolni rekordokat. Meg lehet tenni az SQL * Plus?
Válasz Tom Kyte
Az Oracle8i engedje 8.1 - igen.
Ez minden. Előtti verziókban is beleértve 8,0 nem fog működni.
Csodálatos kérelmet. Csak azt akartam, hogy biztos, hogy értem. A lekérdezés lefut 4 alkalommal, és minden alkalommal a minimális és maximális sorok száma megváltozott. Jobb?
Válasz Tom Kyte
Igen, az értékek min és max változás, hogy a különböző tartományok sorokban.
Mi van a kettő között?
Térjünk vissza a régi vita, mi a különbség a kérelem
Azt állítják, hogy a teljesítmény, hogy azonosak. Tény, hogy a végrehajtási terv az első kérdés:
Úgy tűnik, gyorsabb, mint a
Jegyezzük meg, hogy minden lépést a terv - nem blokkolja. Tehát nem mindegy, milyen állapotban van jelölve előtt.
Válasz Tom Kyte
Kérjük, ne vitatkozz - tesz kísérletet, és bizonyítani (tegyük, én mindig).
Az első vizsgálat, „ahol a rownum 90 és 100 közötti” soha nem hozott eredményt. Ez az állapot - mindig hamis, mindig.
Már bebizonyosodott, válaszul egy másik kérdés (valószínűleg a tiéd is), hogy:
gyorsabb, mint:
Ennyi, remélem fogsz pontszámot. Minden össze van kötve a folyamat végrehajtása COUNT (STOPKEY), valamint az a tény, hogy meg kell tennünk:
Majd alkalmazza a szűrőt, míg az első esetben, úgy döntünk, az első 100 sor minden.
Ne legyenek tehát egylépcsős táblázat:
(Ez eredményeként kapott három alkalommal példányát minden előadás tartalmi all_objects). Megcsinálom három kérelmet. Ön azt mutatják, hogy ez nem működik (nem ad vissza adatokat), az egyik, hogy azt hiszem, értem, és az én verzióm:
Most azt a lekérdezést, azt javasoljuk, hogy:
Nagy különbség. Lefogadom.
Jóváhagyása - nem kell senkinek.
Vizsgálatok, kísérletek, statisztikák - Szeretem őket, szükség van rájuk.
Köszönöm, Tom. Végre észrevette, hogy az egyik feltétele a rownum. és egy másik - rnum. és különböznek :-)
A legjobb megoldás kitaláltam magában:
Ez lassabb, és nyilvánvalóan kevésbé elegáns :-(
Sajnáljuk, de nem látom a különbséget:
Válasz Tom Kyte
Itt van, amit akkor kell használni.
végrehajtja a kérést, kiválasztja az első eredmény 100 sor, és leáll. Ha VASH_ZAPROS kéne az összes sort, mielőtt visszatér az első (pl magában foglalja az építési típusú csoport), a különbség az esetben lehet, hogy kicsi, de ez van. Használja TKPROF. kigyomlálni az idő Ryabota java-kód (mért idő az ügyfél ily módon jelentősen torzíthatja az eredményeket).
Tekintsük a következő példát:
Itt nem kell, hogy az utolsó sort, mielőtt visszatérne az első - akkor működik, nagyon „gyors”
Most adjuk hozzá aggregációs funkció - most meg kell dolgoznia a sort a táblázatban. Azonban, mivel rownum be, amennyire csak lehetséges, felgyorsíthatja a munkát rovására bizonyos optimalizációt
Végül, mit gondol - nem tudunk állni rownum, amennyire csak lehetséges, lehetetlen, hogy optimalizálja semmit, és a lekérdezés működik igazán lassan
Végső soron, akkor dönt. Én csak azt mutatják, hogy a verzió működik többször gyorsabb. Választani.
Az Ön esetében, azt javaslom, a következő:
- hz_parties - ezt a nézetet (tudom)
- Ez a nézet polzhno kap minden vonal előtt honnan lehet majd kiválasztani az első
- Te vybiraeet nem túl sok sor (mintegy ezer - mind illeszkednek RAM)
- Optimalizálása rownum az Ön esetében nem ad sok - segítségével tkprof megtalálja, hogy pontosan mi ez ad.
Általában azt akarom mondani:
A „hol rnum a és b között” hiba lenne, ha tudjuk venni rownum a belső lekérdezés és kap fenomenális, általában nagyobb termelékenység. De választhat.
Az első lekérdezés be alacsonyabb üzemeltetési kétszer gyorsabb, mint a második. Meg tudná magyarázni ennek az oka?
Válasz Tom Kyte
Kétszer olyan gyors. Fura. Nem tudom, hogy ez mit jelent.
Csak azt tudom mondani, hogy a (kijavítása után a kérés), kaptam különböző eredményeket. Az én esetemben, amikor big_table táblázat - körülbelül 1000000 vonalak, kaptam:
A második kérés sokkal hatékonyabb, mint az első.
Válasz Tom Kyte
Ha választanunk kell, hogy lizhe ontsu, azt tanácsolom kapok eredményeként meghatározott más sorrendben, és válassza közelebb van a felső (sorrendjének módosításához az adatok válogatás).
Igen, az utolsó N sor, általában választani hosszabb, mint az első N (nem mindig, de ez elég lehet elvárni)
Próbáltam, hogy végre egy lekérdezést a megrendelt ábrázolás, amelyben a sorok mintegy 7000 eventseverity 64 értéket.
De az eredmény csak 234 sor.
Ha fut egy beágyazott lekérdezés
Kapok 500 sor RNUM értékekkel 1-500
Nem értem, ha szar :-( ajánlása valamit
Válasz Tom Kyte
Utálom rendelni benyújtásával design. Add rendelni igény szerint. Az összetett lekérdezések, az adatok sorrendje a támogatás nem szükséges. A legvalószínűbb, rownum érték elvész valahol, de nem tudom hiányában reprodukálható tesztek pontosan megmondani, hogy mi történik.
Kérelmet nyújtott be te nagyon jó, és gyorsan fut a tartományban 100.000 150.000 vonalak, de amikor megpróbálja minta sorok után 500.000 th dolgozik több mint egy perc alatt.
teljesítése során az értékeket 150.001 és 150.010, a következő eredményeket adja és tervek
És amikor végre a értékeket 1000001 és 1000010, és a terv kimenetelét az alábbiak:
Lehetséges, hogy gyorsítsák fel a folyamat kezd az utolsó sor?
Lehet, hogy jobb hozzá sorrendben DESC tervezés és hogy az első oldalon?
Aktívan használja a lekérdezés, ha dolgozik az adatbázis, ha elolvassa a 1000 bejegyzést. Ha 100.000 bejegyzések (ez teljesen normális, mivel a felhasználók mondd :-)), a mintát az első 1000 sor kerül 50 másodperc :-(. (Server fut a Solaris operációs rendszer és a JDBC interfészt használják az adatbázis eléréséhez). Meg kell rendezni (érdekében a) az egyik elsődleges kulcsokat. tudna tanácsot, hogyan lehet javítani a teljesítmény ebben az esetben.
Válasz Tom Kyte
Ezzel az eszközzel (sql_trace + TIMED_STATISTICS) a lekérdezés végrehajtási tervet, a feldolgozott sorok számát minden egyes lépésénél a terv, és ezen adatok alapján, start beállítást.
Szükség lehet végezni optimalizálása FIRST_ROWS módban.
Mellesleg, az ok 1000 sor, - 25 vagy 100 lesz teljesen tisztázott. De minden esetben, akkor valószínűleg meg kell rendezni minden alkalommal 100.000 vonalak. Azt is ellenőrizze, sort_area méret méret.
Vannak görgethető kurzorok (9.2) a PL / SQL és JDBC, vagy csak pro c / c ++?
Ha nem, ha ez a funkció jelenik meg a PL / SQL?
Válasz Tom Kyte
Ezek a JDBC.
Nem tudok elképzelni egy olyan helyzetet, amelyben szükség van / akar PLSQL. Ezek hasznos kapcsolatok a kliens / szerver környezetben, ha szeretné megtekinteni az eredmény meg oldalanként, de PLSQL ebben a környezetben nem alkalmas - működik a szerveren. Azt feltételezzük, hogy ez lehetővé teszi majd a kliens (például űrlapok vagy JDBC). Amikor egy tárolt eljárást szükség van a „vissza”, hogy feldolgozza a húr?
Hogyan lehet visszaállítani több n minden csoportból rekordok által billentyű, például, az ilyen adatok.
Azt akarom, hogy visszatérjen két rekordot minden csoportból a pályán, áruház - két bejegyzés minden boltban.
Ez ad a kívánt eredményt.
Úgy döntöttem, hogy tovább vizsgálják a javasolt megközelítés Önnek. És ha valaki azt akarja, hogy bejegyzéseket M-edik N-edik a Tanszék helyett Emp:
Nos, ez a hal is sült eltérő módon.
Analitikus funkciókat - ez a teljesítmény:
Amikor megpróbálja végrehajtani az egyik módszer gondjaim voltak.
. Lásd az alábbi kódot:
Azt megoldotta ezt a problémát, miután kivették a kéréssel, hogy a vonal (OPEN out_cvGenric FOR „select * from.”), És meghatározzák a szerkezet segítségével. Minden tökéletesen működik.
Miért van ez a hiba?
Lásd. A következő kód. Ez az én tényleges végrehajtása az eljárás a PL / SQL:
A kód a fent bemutatott lekérdezés benyújtott egy string, az eljárást sikeresen összeállítani. De ha hívod hiba történik.
Ha eltávolítja a feltételt „tire.tire_date>: ReportFromDt és tire.tire_date <:ReportToDt " из конструкции WHERE. запрос работает нормально и дает результаты. Если в запросе указаны даты, все ломается.
Mellesleg, ez a lapszámozásról tárolt eljárás nagyban megkönnyíti a munkát az alkalmazás szerver. De, sajnos, nem tudja megoldani a második probléma.
Tudna olyan megoldás?
Válasz Tom Kyte
ugyanaz a probléma, és ugyanúgy a határozat 8i és korábbi verziók - a dinamikus SQL vagy képviseletet.
2) Miért gondolja - ez nagyon, nagyon rossz ötlet. Először is, a válasz is változik, és a változás (a érték - csak a „kitalálni”). Másodszor azért, mert a legegyszerűbb módja, hogy a rendszer indítására megállt. „Ó, minden alkalommal én ugyanazt a dolgot, és olyan sokáig.” Itt az ideje, hogy növelje a termelékenységet a gép kétszer.
Van egy hiba az SQL utasításból. Egyszer láttam két probléma:
ÉS ORDER BY - után azonnal a kifejezés, és nem elég.
Másodszor, nem elég pár kötődnek változókat. A lista segítségével - öt változó, szükséges, hogy kötődnek 7.
A probléma nem a dátumok - kérés csak rossz.
Tanács (és találtam ezeket a hibákat) - másolja kérelmet SQLPlus. Cseréljük ki a lekérdezés globálisan „” A „és csinálni a parancs után változtatható:
Most már világos, hogy hol a hiba.
Terjedelmi adatok keresésekor a különböző területeken
Válasz Tom Kyte
VASH_ZAPROS kiszerelhetjük egy dinamikus SQL.
Minden alkalommal, amikor végez keresést a helyszínen asktom pontosan mi történik. Dinamikus, valamint a fókuszt a rownum.
I - DBA, és néha probléma merül fel a támogatást a web-alkalmazások.
web-alkalmazások fejlesztői is megkérdezte, hogyan kell végrehajtani egy page-kérdés, mert a kapcsolat nem fenntartása állami információt.
Szeretnék végre a lekérdezést csak egyszer, de volt, hogy valami ilyesmi lesz az, ami újra elemzés, végrehajtó és újramintavételezést minden oldalon:
1) Amennyire én tudom, minden alkalommal, amikor ez történik újbóli vizsgálat újbóli végrehajtása és újra mintát adatokat. Az értékek kötődnek változók tárolják, és a növekedés minden oldalon az alkalmazás. Ez egy jó megközelítés?
2) Nem lenne jobb, hogy visszatérjen a teljes készlet (optimalizálás first_rows)?
3) Hogyan kell végrehajtani ezt?
4) A második megközelítés e szervezni egyfajta szállítószalag nem lehet visszaküldeni a vonal alkalmazás fokozatosan egy lekérdezés, de nem a teljes készletet egyszerre - a tábla túl magas.
Válasz Tom Kyte
1) Igen, én erre. Hiányzik egy állandó kapcsolatot, és működik a kliens-szerver környezetben, és mit kell tenni.
Én személy szerint ismét feldolgozni (lágy) az egyes oldalak, mint fenntartja a külön fizikai kapcsolatot (az összes erőforrás megfelelő) minden felhasználó számára, abban az esetben, azt akarja, hogy lásd a következő oldalon.
2) és kap 500 sor, és a felhasználó nézi az első 10, és soha nem megy a második oldalra. Szóval 50-szer IO (LIO), mint amennyire szüksége van? A legvalószínűbb, egyszer 40 eddiginél nagyobb szükség van (straintsy mérete 10 sor, és a felhasználó nem a 11. oldalon nem jön).
4) Ez azt jelentené, hogy visszatér a kliens-szerver architektúra, az állandó kapcsolat, felfalja a sok gépi erőforrások, akkor is, ha nem használják őket.
Csak sokat változott a kódot, eltávolítja az összes minta száma (*) mielőtt az aktuális lekérdezés - Megvan egy korábbi fejlesztő.
Csodálatos érveket, hogy hallottam a web (PHP) fejlesztő. Csak mindent megváltoztatott, és átadta a felhasználó eldöntheti, hogy ők inkább a legjobb teljesítményt, mint a hiánya felesleges információkat. Találd ki, mi úgy döntöttek!
Ami hiányzik, mint a vonal „Találat 1-10 mintegy 500” - hasznos lenne. A felhasználó szeretné tudni, hogy ha csak néhány rekordot balra - akkor menjen a következő oldalra, vagy több ezer, így a legjobb, hogy adja meg a keresési feltételeket.
Tudom, hogy az Oracle Text komponens lehetővé teszi a dolgokat csinálni, de lehetséges, hogy dolgozzon ki valamit a „standard” Oracle? Ahhoz, hogy az Oracle Text kell átírni sok a rendszert.
Meg lehet választani az alkalmazás adatait 21 vonalon. Ha a kurzor visszatér feljegyzések 10-20, a képernyő lehet kiadni „>> további 7 sor” (például), és amikor visszatér a 21. kérdés a „>> legalább újabb 11 sor.”
Ami hiányzik, mint a vonal „Találat 1-10 mintegy 500”
.
Ha Oracle Text lekérdezések (mint én a webhelyen), akkor van egy megfelelő funkciót.
Ha a költség alapú optimalizáló 9i szerver, akkor az körülbelül sorok számát, majd visszatér a kérelmet az ábrázolás v $ sql_plan.
Pager, a web-környezetben
Az alábbiakban azonosítása (leírás és test) posranichnoy adagoló csomagot szeretnénk használni a web-közepes. Lehetséges, hogy javítsa ezt a végrehajtást?
Igen, az ember, valamit, amit megtettél rossz.
a) nem használja tovább kötődnek változókat. A legjobb módja annak, hogy tönkre minden alkalmazást.
b) Írsz eljárási kódex, ahol csak egy sql-operátor.
c) Ezt az eljárási feldolgozást végzik sorban.
d) Ön helyezzük Dunn vremennutsyu asztal egyáltalán nem látható ok nélkül.
e) Ön szerint az összes vonalak száma egy - írt az előző választ, azt hiszem, ebben a megközelítésben (én nem elfogadható elv).
Ha mindez igaz, akkor kap:
Azt ezt az eljárást alkalmazzuk a webhelyen?
Ha kötődnek változókat az ülés, és a http-kapcsolat állapot információ nem áll fenn, valamint s adatátvitel?
Válasz Tom Kyte
Igen, ez az eljárás, és azt használják.
Rejtett mezők, Keys - is működik.