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.