comandă". Caracteristici ale utilizării opțiunii de indexare „Index cu suplimentare

Astăzi vom vorbi despre indicii MS SQL DBMS și structura lor internă. Voi încerca să vorbesc despre indici atât din punctul de vedere al SGBD, cât și din punctul de vedere al 1C 8.3.

Indecșii sunt un set de legături ordonate după anumite coloane, create pentru a optimiza performanța SGBD-ului MS SQL.

Crearea de indici implicit:

Platforma creează ea însăși indici folosind chei de date cunoscute în prealabil pentru fiecare obiect de metadate (link, cod, nume, măsurători etc.)

Crearea indicilor în mod explicit posibil în trei moduri:

  1. Setarea indicatorului „Index” pentru un câmp (atribut/dimensiune). Opțiunea „Index cu suplimentar” ordonare" adaugă câmpul "Cod" sau "Nume" la index (în primul rând pentru ).
  2. Adăugarea unui câmp la „ ”.
  3. Specificarea câmpului indexat în interogare folosind construcția „ ”.

Obțineți 267 de lecții video pe 1C gratuit:

Indecși în Microsoft SQL DBMS

Indecșii din SGBD MS SQL sunt pagini cu date de 8 KB fiecare. În ciuda faptului că indexurile sunt proiectate pentru a îmbunătăți performanța SGBD-ului, aceștia au anumite dezavantaje - ocupă spațiu pe disc și încetinesc activitatea SGBD-ului la scrierea rândurilor.

Tipuri de indici în MS SQL DBMS:

  1. Indici non-cluster— astfel de indexuri nu reconstruiesc tabele, ci doar organizează legături.
  2. Indici grupați sunt necesare pentru a construi un tabel în conformitate cu indexul. Datele sunt organizate, de exemplu, alfabetic. Nevalid pentru coloanele care se schimbă frecvent, deoarece SGBD-ul reconstruiește fizic constant tabelul folosind acest index.
  3. Indici unici- un fel de „suprastructură” pentru indici grupați și non-cluster. Un astfel de index este unic pe baza câmpurilor cheie.

Tipuri de chei într-un SGBD:

  • Cheia principala— un set de coloane care caracterizează în mod unic un rând.
  • Cheie străină (străină)— un câmp de tabel care stochează valoarea cheii primare în scopul organizării relațiilor dintre tabele. 1C nu folosește acest tip de taste.

Nuanțe importante ale utilizării indicilor

Utilizarea corectă a indecșilor poate accelera interogările nu doar de câteva ori, ci de sute, uneori chiar de mii de ori.

Acest tip de accelerare pur și simplu nu poate fi realizat cu hardware. Prin urmare, acestui subiect trebuie acordată o atenție deosebită.

Adesea, pentru a accelera o interogare, trebuie să vă creați propriul index și există mai multe moduri diferite de a face acest lucru.

În tutorialele video vom analiza mai multe moduri de a crea un index. Vom lua în considerare, de asemenea, o situație în care un index al compoziției necesare nu poate fi creat folosind instrumente standard ale platformei și va trebui creat în DBMS.

Configurarea indicilor folosind instrumente standard ale platformei

Lecția arată ce indici sunt creați de fapt pentru obiecte la nivel DBMS.
Nu totul în acest subiect este atât de evident pe cât ar părea la prima vedere. La urma urmei, pentru o serie de obiecte există caracteristici de creare a indecșilor.
Vom analiza toate detaliile în acest videoclip.

Indexare cu comandă suplimentară

Videoclipul arată diferența dintre opțiunea de construcție a indexului Index din Index cu suplimentar comanda.
Exemplul arată ce fel de index va construi platforma atunci când se utilizează comandă suplimentară.

Crearea unui index pentru dimensiunile registrului

Indexarea primei dimensiuni a registrelor are mai multe nuanțe.
Videoclipul arată ce indici sunt creați pentru măsurătorile registrului. Se are în vedere și situația indexării primei dimensiuni de registru.

sau

De ce un dezvoltator 1C trebuie să „indexeze” dimensiunile și detaliile?

- Ei bine, ai cereri! - a spus baza de date și a închis...

Răspunsul scurt la întrebarea din titlu este că acest lucru va permite interogărilor să ruleze rapid și să reducă impactul negativ al blocărilor asupra .

Ce este un index?

Optimizarea plasării indexului

Atunci când volumul tabelelor nu le permite „încadrarea” în memoria RAM a serverului, viteza subsistemului de disc (I/O) este pe primul loc. Și aici puteți acorda atenție capacității de a plasa indexuri în fișiere separate situate pe hard disk-uri diferite.

Descrierea detaliată a acțiunilor http://technet.microsoft.com/ru-ru/bibliotecă/Domnișoară175905.aspx
Utilizarea unui index dintr-un grup de fișiere diferit îmbunătățește performanța indecșilor non-cluster datorită concurenței dintre procesele I/O și lucrul la indexul în sine.
Prelucrarea menționată mai sus poate fi utilizată pentru a determina dimensiunile.

Impactul indicilor asupra încuietorilor

Absența indexului necesar pentru o interogare înseamnă iterare prin toate înregistrările din tabel, ceea ce duce la rândul său la blocări redundante, i.e. înregistrările inutile sunt blocate. În plus, cu cât o interogare durează mai mult pentru a se finaliza din cauza indecșilor lipsă, cu atât va fi mai mare durata de păstrare a blocării.
Un alt motiv pentru blocări este un număr mic de înregistrări în tabele. În acest sens, SQL Server, atunci când alege un plan de execuție a interogării, nu folosește indexuri, ci accesează cu crawlere întregul tabel (Table Scan), blocând întregul tabel. Pentru a evita o astfel de blocare, este necesar să creșteți numărul de înregistrări din tabele la 1500-2000. În acest caz, scanarea tabelului devine mai costisitoare și SQL Server începe să folosească indecși. Desigur, acest lucru nu se poate face întotdeauna o serie de directoare precum „Organizații”, „Depozite”, „Divizii”, etc. au de obicei puține intrări. În aceste cazuri, indexarea nu va îmbunătăți performanța.

Performanța indicelui

Am remarcat deja în titlul articolului că suntem interesați de efectul indexurilor asupra performanței interogărilor. Deci, indexurile sunt cele mai potrivite pentru următoarele tipuri de sarcini:

  • Interogări care specifică criterii de căutare „înguste”. Astfel de interogări trebuie să citească doar un număr mic de rânduri care îndeplinesc anumite criterii.
  • Interogări care specifică un interval de valori. Aceste interogări trebuie, de asemenea, să citească un număr mic de rânduri.
  • O căutare care este utilizată în operațiunile de conectare. Coloanele, care sunt adesea folosite ca chei de legare, sunt grozave pentru indexuri.
  • O căutare în care datele sunt citite într-o anumită ordine. Dacă setul de rezultate de date urmează să fie sortat în ordinea indexului grupat, atunci nu este necesară sortarea deoarece setul de rezultate de date este deja pre-sortat. De exemplu, dacă se creează un index grupat pe coloanele nume, prenume și aplicația necesită sortarea după nume și apoi după prenume, atunci nu este nevoie să adăugați o clauză ORDER BY.

Adevărat, cu toată utilitatea indicilor, există un DAR foarte important - indexul trebuie să fie „utilizat eficient” și trebuie să permită găsirea datelor folosind mai puține operațiuni I/O și cantitatea de resurse de sistem. În schimb, indecșii neutilizați (folositi rar) au mai multe șanse să degradeze performanța de scriere a datelor (deoarece fiecare operațiune care modifică datele trebuie să actualizeze și paginile de index) și să creeze spațiu în exces în baza de date.

Acoperire(pentru o cerere dată) se numește index care conține toate câmpurile necesare pentru această solicitare. De exemplu, dacă un index este creat pe coloanele a, b și c, iar instrucțiunea SELECT interogă date numai din acele coloane, atunci este necesar doar accesul la index.

Pentru a determina eficacitatea indexului, putem estima aproximativ folosind un serviciu online gratuit care afișează „planul de execuție a interogărilor” și indicii utilizați.

Când descrieți detaliile diferitelor obiecte în metadate, este posibil să setați proprietatea Index. Această proprietate permite dezvoltatorului de configurație să indice sistemului necesitatea de a construi un index separat în baza de date pentru detaliile corespunzătoare.

Pe lângă opțiunea „Index” din această proprietate, pentru majoritatea obiectelor puteți seta opțiunea „Index cu ordonare suplimentară”. Această opțiune este destinată în primul rând utilizării în liste dinamice.

În opțiunea „Index”, un index este construit direct pe baza detaliilor. De asemenea, indexul este completat cu un link pentru a asigura o anumită ordine a înregistrărilor în index atunci când valorile atributelor sunt repetate.

În opțiunea „Index cu ordonare suplimentară”, indexul este construit pe atribut, precum și după un câmp care este de obicei folosit pentru a ordona obiecte de acest tip. Pentru un director, indexul, în funcție de reprezentarea principală, este completat cu un cod sau un nume. Iar pentru un document, indexul este completat cu o dată. Acest index este completat și de un link.

În opțiunea „Index”, o listă dinamică poate oferi o vizualizare eficientă a unor volume mari de informații cu ordonarea după acest atribut, deoarece indexul creat va fi folosit pentru aceasta.

Opțiunea „Index cu ordonare suplimentară” dintr-o listă dinamică poate oferi vizualizarea eficientă a cantităților mari de informații cu selecție după valoarea unui atribut dat și cu ordonarea corespunzătoare ordinii principale pentru un anumit obiect. În acest caz, prezența unui index care include atributul prin care se efectuează selecția și câmpul principal de ordonare va permite sistemului să utilizeze indexul la vizualizarea listei.

Desigur, indexurile afectează și alte modalități de preluare a informațiilor (obținerea datelor folosind metode de gestionare de obiecte sau interogări).

Astfel, atunci când determinați o opțiune pentru proprietatea Index, ar trebui să continuați de la care opțiuni pentru preluarea informațiilor trebuie optimizate mai întâi. De exemplu, dacă trebuie să vizualizați o listă cu selecție după detalii, atunci este logic să utilizați opțiunea „Index cu comandă suplimentară”. Și dacă indexul este necesar, de exemplu, numai pentru căutarea prin interogare a obiectelor după detalii date fără a ordona, atunci este mai bine să utilizați opțiunea „Index”, astfel încât indexul creat să necesite mai puține resurse de sistem.

Compoziția indecșilor generați de sistem pentru diferite combinații de proprietăți de metadate este detaliată în articolul „Indici de tabele de baze de date”.