Influența indecși asupra performanței 1C Enterprise 8, accelerează 1C

Gilev.ru | Accelerând 1C: Enterprise | +7 909 9458594

- Ei bine, tu și cereri de oferta! - a declarat că baza de date și spânzurat ...

Răspunsul scurt la întrebarea din titlu este că acesta va rula interogări rapid și pentru a reduce impactul negativ asupra performanței de blocare în modul multiplayer.







Ce este un index?

La fel ca și conținutul cărții, indicele în baza de date vă permite să căutați rapid pentru informații specifice în tabel.

În primul rând, să vorbim despre indicii în MS SQL Server.
Indicii reprezintă structura, permite accesul rapid la rânduri de masă, bazate pe valorile unuia sau mai multora dintre coloanele sale.
Index conține cheile construite dintr-una sau mai multe coloane din tabel sau vizualizare, iar indicii care sunt comparate cu predeterminate locație de stocare a datelor.
Indici ai reduce cantitatea de date care trebuie să fie luate în considerare, în scopul de a returna un set de rezultate.

Deși indicele și asociat cu o anumită coloană (sau coloane) din tabel, deși este un obiect separat în baza de date.

Influența indecși asupra performanței 1C Enterprise 8, accelerează 1C

obiecte simple "index" 1C: Enterprise 8 nr.

date indexurile tabele bazate pe 1C: Enterprise sunt create în mod implicit la crearea de obiecte de configurare, precum și în diferite setări de configurare de obiecte.

Evidentă modul în care proprietățile „Index“ „Index“ detalii și valoarea de măsurare de comutare și „Index pentru a adăuga. Comandarea“. Opțiunea „“ Index pentru a adăuga. Comandarea „“ include, de obicei, coloana „codul“ sau „numele“ în index.

Influența indecși asupra performanței 1C Enterprise 8, accelerează 1C

Un alt mod evident este posibil să se ia în considerare adăugarea de obiecte de metadate în obiectul de metadate „criterii de selecție.“

Influența indecși asupra performanței 1C Enterprise 8, accelerează 1C

Puteți specifica un index pentru un tabel de valori și pentru tabele temporare, interogări.

ALEGE
codul
nume
PUT VremennayaTablitsa
DE LA Spravochnik.Nomenklatura
Indexată de codul

În orice caz, este necesar să se înțeleagă că vorbind despre indicii, ne referim de fapt, indicii de baze de date utilizate pentru a 1C: Enterprise. Excepțiile sunt obiecte, cum ar fi valorile de masă, când indicii sunt în RAM (RAM).

Esența fizică a indecși în MS SQL Server.

Fizic, datele sunt stocate pe 8KB pagini. Imediat după înființarea, până când tabela nu are indici, tabela arata ca un (morman) date gramada. Intrările nu au o anumită ordine de stocare.
Când doriți să acceseze datele, SQL Server va efectua o scanare tabel (tabelul de scanare). SQL Server scanează întregul tabel, care ar trebui să găsească intrarea dorită.
Aceasta explică funcțiile de bază ale indicilor:
- crește viteza de acces,
- suport de date unicitate.

În ciuda avantajelor indicilor au, de asemenea, unele dezavantaje. Prima dintre ele - indexurile ocupă mai mult spațiu pe disc și în memorie. De fiecare dată când creați un index, vă păstrați cheile în ordine crescătoare sau descrescătoare, care pot avea o structură stratificată. Și mai mult / mai cheie, cu atât mai mare dimensiunea indexului. Al doilea dezavantaj - încetini insera, actualiza și șterge înregistrări.
În mediul MS SQL Server oferă mai multe tipuri de index:

  • indici non-cluster;
  • Cluster (sau cluster) indexuri;
  • indecși unici;
  • indexurile cu coloane incluse
  • vizualizări indexate
  • Full Text
  • XML

index non-grupată

indicele non-cluster - nu reconstrui structura fizică a mesei, ci organizează doar referiri la linia corespunzătoare.
Pentru a identifica linia corectă în indexul tabelul nonclustered organizează semne speciale, inclusiv:

  • informații despre fișier numărul de identificare, în care este stocată șirul;
  • ID-ul paginii de date relevante;
  • numărul liniei dorite pe acea pagină;
  • Conținutul coloanei.

Non-grupate indexurile pot fi oarecum pe aceeași masă.

indicele non-cluster pe un tabel care are un index pus în cluster

Indexul non-grupată pe masă, având un indice de cluster

Cluster (cluster) index

Diferența principală grupate index pe indicii altor tipuri este că, atunci când se determină locația fizică în datele tabel este rearanjat în conformitate cu structura indicelui. Structura logică a tabelului, în acest caz reprezintă un dicționar, mai degrabă decât indicele. Datele din dicționar este aranjat astfel fizic în ordine alfabetică.






poate oferi indicii grupat o creștere semnificativă a datelor de performanță de căutare, chiar și în comparație cu indicii convenționali. Creșterea productivității este vizibil mai ales atunci când se lucrează cu date seriale. Dacă tabelul este definit indicele non-cluster, serverul trebuie să se aplice mai întâi la index, și apoi găsiți linia din tabel. Dacă utilizați indicii grupat următoarea bucată de date se află imediat după datele găsite anterior. Acest lucru elimină operațiunile inutile asociate cu referire la indexul și căutarea pentru noi dorite rândurile din tabel.
Firește, numai un indice de cluster poate fi definit în tabel. Un index cluster poate include mai multe coloane.
Este necesar să se evite crearea unui indice de cluster pentru coloane schimbat frecvent, deoarece serverul va trebui să efectueze mișcarea fizică a tuturor datelor din tabel că acestea se află în stare de ordine, în conformitate cu indicele de cluster. Pentru modificările de intensitate ale coloanelor este cel mai bun index non-grupată.
Când creați o cheie primară în tabel (PRIMARY KEY), serverul creează automat pentru el un indice de cluster, în cazul în care nu este anterior există, sau dacă determinarea nu a fost o cheie specifică în mod explicit un alt tip de index.
Atunci când tabela este definită este, de asemenea, un index non-cluster, indexul său nu se referă la locația fizică a șirului în baza de date, iar elementul corespunzător unui indice de cluster, care descrie această linie, care permite să nu restructura indicii non-cluster ori de câte ori un indice de cluster modifică ordinea fizică rânduri în tabel.

Un index unic

Unicitatea valorilor din coloana indexată furnizează indici unici. În cazul în care orice server nu permite introducerea unei noi sau de a modifica o valoare existentă, astfel încât, ca urmare a acestei operațiuni, coloana a apărut două valori identice.
Un index unic este un fel de suprastructură și pot fi implementate atât indicele grupat și non-grupată pentru. Singurul tabel poate fi un set unic pus în cluster și non-grupată unic de indici.
indexuri unice ar trebui să fie determinată numai atunci când este cu adevărat necesar. Pentru a asigura integritatea datelor din coloana, puteți defini un unic sau cheie primară constrângere, mai degrabă decât a recurge la un index unic. Utilizarea lor este numai pentru a asigura integritatea datelor este nerezonabil deșeurilor de spațiu în baza de date. În plus, pentru întreținere și timp CPU pierdut.

1C: Enterprise 8 este activ folosind cluster indexurile unice. Acest lucru înseamnă că puteți obține o eroare nu un index unic.

Conceptul de cheie primară și externă

Cheia primară (cheie primară) - un set de coloane într-un tabel ale cărui valori sunt în mod unic șir determinat.

cheie externă (cheie externă). Este numit un câmp cheie externă a tabelului pentru stocarea cu valorile cheii primare a unui alt tabel, în scopul de a organiza comunicarea între aceste tabele. O cheie externă în tabel se poate face referire la acest tabel foarte. Astfel de chei externe sunt utilizate în principal pentru stocarea unei structuri de date copac într-un tabel relational. Baze de date sprijină integritatea automată de control referențiale pe chei externe.
1C nu utilizează chei străine. integritatea referențială asigură logica aplicației.

restricţii index

Indicele poate fi creat pe baza mai multor domenii. În acest caz, există o limitare - lungimea cheii index nu trebuie să depășească 900 de octeți și un coloane de 16-cheie. În practică, acest lucru înseamnă că, atunci când creați un index, care include mai mult de 16 domenii, indicele este trunchiat. Acest lucru poate avea un impact asupra performanței atunci când numărul de tip compozit subkonto mai mult de 4.

Emisiile actuale ale platformei se face optimizarea cazului și utilizează un hash de domenii-cheie, dar este mai lent decât indicele de „plin“.

index Statistica

Microsoft SQL Server colectează statistici privind indicii și câmpurile de date stocate în baza de date. Aceste statistici sunt folosite de către SQL Server interogare de optimizare în selectarea celui mai bun plan de execuție interogare pentru datele de selecție sau de actualizare.

La crearea unui index, optimizatorul de interogare stochează automat pe coloanele indexate, statistici.

indicele de fragmentare

Influența indecși asupra performanței 1C Enterprise 8, accelerează 1C

Optimizarea plasarea indicilor

Cu volumul de tabele care nu le permite să „rămână“ în memoria serverului, primul loc acolo subsistem de disc de viteză (I / O). Și puteți să acorde o atenție la capacitatea de a plasa indici în fișiere separate pe diferite hard disk-uri.

Influența indecși asupra performanței 1C Enterprise 8, accelerează 1C

pași detaliate http://technet.microsoft.com/ru-ru/library/ms175905.aspx
Folosind fișierul index dintr-un alt grup de indicele non-cluster îmbunătățește productivitatea datorită execuției în paralel a proceselor I / O și cu el însuși index.
Pentru a determina dimensiunile menționate pot utiliza procesarea de mai sus.

Indicii de influență de blocare

varianța eficiență

Am menționat deja în titlul articolului pe care ne interesează efectul indicii asupra performanței interogărilor. Astfel, indici sunt cele mai potrivite pentru următoarele tipuri de sarcini:

  • Cererile care indică criterii „înguste“ Căutarea. Astfel de solicitări ar trebui să fie citit doar un număr mic de linii care îndeplinesc anumite criterii.
  • Interogările care indică o gamă de valori. Aceste solicitări ar trebui să citească, de asemenea, numărul mic de rânduri.
  • Căutare, care este utilizat în operația de legare. Coloanele, care sunt adesea folosite ca o cheie de legare, perfecte pentru indici.
  • Căutare, în care datele sunt citite într-o anumită ordine. În cazul în care setul de rezultate ar trebui să fie sortate în ordinea indicelui grupată, sortarea nu este necesară, deoarece setul de rezultate este deja pre-sortate. De exemplu, dacă un indice de cluster este creat pe coloane lastname (nume), prenume (numele), și doriți să sortați după numele de aplicare și apoi după nume, nu este necesar să adăugați ORDER BY declarație.

Este adevărat pentru toți indicii de utilitate, există un foarte important, dar - indicele trebuie să fie „utilizat în mod eficient“, și ar trebui să poată găsi date folosind mai puține resurse IO și de sistem. În schimb, neutilizate coduri de date (utilizate rar), mai degrabă se agravează viteza de înregistrare (pentru că fiecare operațiune de a modifica datele trebuie să actualizeze, de asemenea, indexul paginii) și de a crea baza de volum în exces.

Acoperirea (pentru cererea) se numește indicele conține toate câmpurile necesare pentru interogare. De exemplu, în cazul în care indicele este creat pe coloane a, b și c, precum și SELECT interogări datele de la doar acele coloane care au nevoie pentru a avea acces numai la index.

Trebuie să vă conectați pentru a posta un comentariu.

Microsoft SQL Server Client nativ 10.0: Atenție! Lungimea maximă cheie - 900 de octeți. Index «_CommonSett_ByKey_SSS» are o lungime maximă de 1152 octeți. Pentru unele combinații de mare

inserturi valori sau actualizări nu pot fi efectuate.
HRESULT = 80040E2F, HRESULT = 80040E2F, SQLSrvr: SQLSTATE = 23000, stare = 1, Severitatea = 10, nativ = 1505. linie = 1
SQLSrvr: SQLSTATE = 01000, stare = 1, Severitatea = 0, = nativ 1945, linia = 1