Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


INDEX SI SINONIME - ORACLE

baze de date



+ Font mai mare | - Font mai mic



INDEX SI SINONIME - ORACLE

  • Crearea unui Index

Index ORACLE poate fi creat in linia de comanda cu comanda CREATE INDEX.



CREATE [UNIQUE] INDEX index_name

ON table (column [m])

  • Crearea unui INDEX pentru a imbunatati timpul de raspuns

Pentru a creea un index numit I_NAME care va fi folosit pentru a imbunatatii timpul de interogare , introduceti:

CREATE INDEX I_ENAME

ON EMP (ENAME);

  • Crearea unui INDEX pentru a asigura unicitatea

Indecsi unici sunt creati automat ca un rezultat al constantelor PRIMARY KEY sau UNIQUE in tabela. Oricum , se mai pot creea folosind comanda CREATE UNIQUE INDEX.
Pentru a evita valori duplicate in coloana EMPNO, introduceti:

CREATE UNIQUE INDEX I_EMPNO

ON EMP (EMPNO);


Index-ul urmator asigura unicitatea valorii introduse in tabela SHIPMENTS.
Acesta este denumit index CONCATENATED.

CREATE UNIQUE INDEX ORDER

ON SHIPMENTS (S_Num, P_Num);

  • Stergerea unui INDEX

Pentru a sterge definitia unui index din tabela de date , introduceti:

DROP INDEX indexname;

  • Cind este folosit un INDEX ?

Folosirea unui INDEX depinde in parte de optimizatorul ORACLE in momentul executiei. ORACLE 7 permite ambele metode de optimizare SQL, functie de un set de reguli sau functie de cost.

  • Reguli de folosire al unui index

Oracle decide cind este adecvat sa foloseasca indexi. Oracle tine seama de coloanele indexate si de tipul indexului si decide functie de urmatoarele reguli:

    1. Indexii de pe coloane trebuie adresati in clauza WHERE:
      Urmatoarea interogare nu foloseste un index atita timp cit clauza WHERE nu este prezenta:

SELECT ENAME,JOB,SAL,COMM

FROM EMP;


Urmatoarea indetogare va folosi un index pe coloana ENAME:

SELECT *

FROM EMP

WHERE ENAME = 'JHONES';

    1. Un index nu va fi folosit daca coloana referita in clauza WHERE face parte dintr-o expresie sau functie.
      Exemplul urmator nu foloseste index deoarece coloana este parte a unei functii:

SELECT *

FROM EMP

WHERE UPPER(ENAME)= 'JHONES';


In mod similar daca HIREDATE a fost indexata, aceasta interogare nu va folosi index deoarece este o expresie:

SELECT *

FROM EMP

WHERE    HIREDATE+7 = '01-JAN-84';

  • Utilizarea indexarii functie de cost

Modulul de optimizare bazat pe costul executiei decide un plan de executie pentru o secventa SQL calculind costul cailor alternative folosind informatii statistice acumulate daca este posibil. De obicei se va decide cea mai buna cale de utilizare a unui index.

  • Sugestii pentru INDEXARE
    • O tabela cu mai mult de 200 linii va beneficia din indexare pentru imbunatatirea performantelor, daca mai putin de 10% din linii vor fi intoarse in cazul unei interogari.
    • Indexati toate coloanele acolo unde sunt cerute valori unice.
    • Daca doua sau mai multe coloane sunt utilizate in mod frecvent impreuna in clauza WHERE sau JOIN atunci creeati un index concatenat. (CONCATENATED INDEX)
    • Evitati mai mult de trei indexi pentru o tabela. In acest caz va fi o supraincarcare in cazul unei operatii DML. (aceasta regula s-ar putea sa nu fie valabila pentru tabele la care SELECT este operatiunea cea mai frecventa, de exemplu tabele de referinte.)
  • Indexare si Imbinare

Daca nu exista index in cadrul coloanelor IMBINATE atunci se poate obtine o 'sortare-imbinata'. Asca inseamna ca fiecare este sortata separat si apoi listele sortate sunt imbinate . De obicei coloanele folosite pentru imbinari trebuie sa fie indexate. Daca numai una din tabele are un index utilizabil, atunci cealalta tabela este tabela conducatoare.

De exemplu:

SELECT    ENAME, DNAME

FROM DEPT, EMP

WHERE EMP.DEPTNO = DEPT.DEPTNO


Daca numai EMP.DEPTNO este indexata , atunci DEPT este tabela conducatoare. Acest lucru este normal deoarece DEPT intoarce mai multe linii decit EMP.
Daca ambele sunt indexate, Oracle alege tabela conducatoare cintarind rangurile celor doua sisteme. Daca rangurile sunt egale atunci Oracle alege tabela care este listata ultima in clauza FROM.

Asa ca trebuie listate tabele mari cu cel mai mic numar de linii la sfirsitul clauzei FROM.

SELECT    ENAME, DNAME

FROM EMP, DEPT

WHERE EMP.DEPTNO = DEPT.DEPTNO

Crearea unui SYNONYM pentru o Tabela, Imagine sau Secventa

Pentru a referi o tabela detinuta de un alt utilizator, trebuie sa prefixati numele tabelei cu numele utilizatorului care a creat-o urmat de punct (.).

Pentru a referi tabela EMP detinuta de SCOTT, introduceti :

SELECT *

FROM SCOTT.EMP;

Alternativa este de a crea un sinonim ( alt nume ) pentru tabela sau imaginea data.

Pentru a referi tabela EMP a lui SCOTT doar cu numele 'EMP', introduceti :

CREATE SYNONYM    EMP

FOR SCOTT.EMP;

Acum, cand executati o cerere asupra tabelei EMP a lui Scott, doar introduceti :

SELECT *

FROM EMP;

Doar DBA poate crea sinonime PUBLICe la care toti utilizatorii sa aiba acces.

CREATE PUBLIC SYNONYM nume_sinonim

for [proprietar.] nume_obiect;

Un sinonim public poate fi eliminat prin tastarea :

DROP [ PUBLIC ] SYNONYM nume_sinonim;

Sinonimele sunt utilizate din motive de sceuritate si comoditate, incluzand :

  • pentru a referi o tabela, secventa sau imagine fara a specifica detinatorul obiectului
  • pentru a furniza un alt nume pentru tabela.

Din motive de performanta, du e recomandabila utilizarea de sinonime la referirea de tabele in aplicatii.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1576
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved