Ce înseamnă ' mesele de autobuz ' înseamnă?


Cel mai bun răspuns

Mese de autobuz este o slujbă într-un restaurant. Înseamnă să curățați masa între clienți. Aceasta include îndepărtarea tuturor obiectelor murdare sau uzate (vase, veselă, șervețele) și apoi ștergerea de pe masă.

Denumirea tradițională pentru acest lucru este „busboy”, dar nu toți cei care fac această treabă sunt băieți. . S-ar putea să existe acum un termen mai neutru din punct de vedere al genului.

Răspuns

În scenariul pe care îl descrieți, afirmați că cele mai frecvent utilizate câmpuri din tabel sunt cheia principală (CompanyId ), un singur câmp de date (CompanyName) și o cheie externă (IndustryId). Dacă există indexuri pe aceste câmpuri, care este garantat pentru cheia primară și extrem de probabil pentru cheia externă, deoarece altfel performanța bazei de date ar fi nesuferită, atunci interogările care fac referire doar la aceste câmpuri vor fi, în multe cazuri, satisfăcute în întregime din indexuri . Paginile bazei de date în sine nu vor fi citite. Puteți verifica acest lucru singur solicitând un plan de execuție a interogării de la analizorul de interogări. Dacă planul de execuție folosește o „căutare index” sau „index spool”, atunci folosește un index pentru a construi rezultatele interogării. Dacă indexul cheii primare este grupat, situația este oarecum diferită, dar o voi lăsa la mâna veți cerceta ce este un index clusterizat în SQL Server și cum modifică modul în care este stocată și accesată baza de date. În general, dacă SQL Server poate construi un set de rezultate folosind datele dintr-un index, va face acest lucru în loc să folosească paginile tabelului bazei de date, deoarece asta înseamnă citirea mai puține date. Un index este structurat identic cu un tabel, cu excepția faptului că are doar coloanele specificate în index, plus un câmp de localizare a rândurilor care este un pointer către locul unde este stocat rândul; acel indicator (24 de octeți) este de obicei mai mic decât datele rândurilor în sine și astfel aproape invariabil mai multe rânduri de tabele index decât rândurile de tabel se vor potrivi într-o pagină de bază de date.

Dimensiunea paginii bazei de date din SQL Server este fixată la 8192 octeți. 96 de octeți ai paginii sunt folosiți pentru un antet; acest plus alte cheltuieli generale lasă o dimensiune maximă de rând de 8060 octeți. Cu toate acestea, SQL Server 2008 va permite coloanelor varchar, nvarchar, varbinary și sql\_variant să depășească această limită și va muta aceste câmpuri pentru a depăși paginile atunci când includerea lor într-un rând ar face ca un rând să depășească această limită de dimensiune a rândului. De asemenea, text, ntext, imagine, nvarchar (max), varchar (max), varbinary (max) și coloanele xml sunt întotdeauna stocate în pagini separate, indiferent de cât de multe date sunt stocate efectiv în coloană. Definiția tabelului pe care ați postat-o ​​afișează lățimile coloanei totale care depășesc cu mult limita de 8060 de octeți, dar cea mai mare parte a acestora se află în câmpuri varchar (n), așa că veți ajunge cu pagini de depășire a rândurilor pentru rândurile în care dimensiunea reală a variabilei lățimea coloanelor este suficient de mare. Numărul de pagini pe care un rând îl va folosi în acest tabel va varia, prin urmare, în funcție de cât timp sunt datele stocate efectiv în coloanele cu lățime variabilă pentru fiecare rând.

În ceea ce privește îmbunătățirea performanței, dacă aveți doar câteva câmpuri care sunt utilizate în mod obișnuit, puteți obține la fel de multă îmbunătățire doar asigurându-vă că câmpurile și combinațiile de câmpuri pe care le utilizați în mod obișnuit sunt disponibile ca indici. Aceasta va însemna că majoritatea seturilor de rânduri pot fi populate din datele indexului în loc de datele din tabel, ceea ce va evita problemele legate de încărcarea rândurilor mari din baza de date. Cel mai bun dintre toate, acest lucru se poate face în întregime la nivelul DBA; aplicația nu trebuie rescrisă pentru a reflecta schimbarea schemei cauzată de adăugarea (sau eliminarea) indexurilor. Și, evident, orice coloană pe care o veți folosi ca parte a unei îmbinări ar trebui indexată; altfel, veți face scanează tabelul pentru acele asocieri care sunt într-adevăr destul de lente.

Aș putea sugera să luați în considerare ntext în loc de câmpuri nvarchar mari pentru unele dintre acele câmpuri mai mari, deși acest lucru poate necesita modificări în codul aplicației, deoarece semantica textului / ntext sunt diferite de cele ale varchar / nvarchar. Coloanele text / ntext sunt întotdeauna stocate în pagini LOB, în loc să fie stocate condiționat în pagina de date de rând și dacă aceste coloane sunt deseori prezente și de dimensiuni moderate (de exemplu, , 1000-2000 octeți), stocarea lor ca text / ntext va menține restul paginilor de date de rând mai mici și poate permite mai multe rânduri pe pagină, ceea ce va accelera scanările tabelelor care nu trebuie să facă referință la aceste coloane.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *