Bästa svaret
Bussbord är ett jobb i en restaurang. Det betyder att städa bordet mellan kunderna. Detta inkluderar att ta bort alla smutsiga eller begagnade föremål (disk, bestick, servetter) och sedan torka av bordet.
Den traditionella jobbtiteln för detta är ”busboy”, men inte alla som gör det här jobbet är en pojke . Det kan finnas en mer könsneutral term för det nu.
Svar
I det scenario du beskriver anger du att de vanligaste fälten i tabellen är den primära nyckeln (CompanyId ), ett enda datafält (CompanyName) och en utländsk nyckel (IndustryId). Om det finns index på dessa fält, vilket är garanterat för den primära nyckeln, och extremt troligt för den främmande nyckeln, eftersom annars skulle din databasprestanda suga, kommer frågor som bara refererar till dessa fält i många fall vara uppfyllda helt från indexen . Själva databassidorna kommer inte att läsas. Du kan kontrollera detta själv genom att begära en frågekörningsplan från fråganalysatorn. Om exekveringsplanen använder en ”indexsökning” eller ”indexspool”, använder den ett index för att skapa frågeresultaten. Om det primära nyckelindexet är grupperat är situationen något annorlunda, men jag lämnar det till dig att undersöka vad ett klusterindex är i SQL Server och hur det ändrar hur databasen lagras och nås. I allmänhet, om SQL Server kan konstruera en resultatuppsättning med hjälp av data från ett index, kommer den att göra det istället för att använda databasbordssidorna, eftersom det innebär att läsa mindre data. Ett index är strukturerat identiskt med en tabell, förutom att det bara har de kolumner som anges i indexet, plus ett radlokeringsfält som är en pekare till där raden lagras; den pekaren (24 byte) är vanligtvis mindre än själva raddata och så kommer alltid alltid fler indextabellrader än tabellrader att passa in på en databassida.
Databasstorleken i SQL Server är fast vid 8192 byte. 96 byte på sidan används för en rubrik; detta plus andra omkostnader lämnar en maximal radstorlek på 8060 byte. SQL Server 2008 tillåter emellertid varchar-, nvarchar-, varbinary- och sql\_variant-kolumner att överskrida denna gräns och kommer att flytta dessa fält för att överflödiga sidor när deras inkludering i en rad skulle leda till att en rad överskrider denna radstorleksgräns. Dessutom lagras alltid text, ntext, bild, nvarchar (max), varchar (max), varbinary (max) och xml kolumner på olika sidor oavsett hur mycket data som faktiskt lagras i kolumnen. Tabelldefinitionen som du har lagt upp visar de totala kolumnbredderna som långt överstiger 8060 bytegränsen, men det mesta är i varchar (n) -fält, så du kommer att sluta med radöverskridningssidor för rader där den faktiska storleken på variabeln breddkolumnerna är tillräckligt stora. Antalet sidor som en rad kommer att använda i denna tabell kommer därför att variera beroende på hur länge data som faktiskt lagras i kolumnerna med variabel bredd är för varje rad.
När det gäller att förbättra prestanda, om du bara har ett fåtal fält som vanligtvis används, kan du förmodligen få lika mycket förbättring bara genom att se till att fält och kombinationer av fält som du ofta använder är tillgängliga som index. Detta innebär att de flesta rader kan fyllas från indexdata istället för tabelldata, vilket undviker problem med att ladda stora rader från databasen. Bäst av allt, detta kan göras helt på DBA-nivå; applikationen behöver inte skrivas om för att återspegla ändringen i schemat som orsakas av att man lägger till (eller tar bort) index. Och självklart ska alla kolumner som du använder som en del av en koppling indexeras; annars kommer du att göra tabellskannar efter de sammanfogningar som är ganska långsamma.
Jag kan föreslå att du överväger ntext istället för stora nvarchar-fält för några av de större fälten, även om detta kan kräva ändringar av applikationskoden eftersom textens semantik / ntext skiljer sig från varchar / nvarchar. Text / ntextkolumner lagras alltid på LOB-sidor, istället för villkorligt lagrade på raddatasidan, och om dessa kolumner ofta finns och har måttlig storlek (säg , 1000-2000 byte), kommer lagring av dem som text / ntext att hålla resten av raddatasidorna mindre och kan möjliggöra fler rader per sida, vilket kommer att påskynda tabellskanningar som inte behöver referera till dessa kolumner. p>