Beste svaret
Bussbord er en jobb i en restaurant. Det betyr å rense bordet mellom kundene. Dette inkluderer å fjerne alle skitne eller brukte gjenstander (servise, sølvtøy, servietter) og tørke av bordet.
Den tradisjonelle jobbtittelen for dette er «busboy», men ikke alle som gjør denne jobben er en gutt . Det kan være et mer kjønnsnøytralt begrep for det nå.
Svar
I scenariet du beskriver, oppgir du at de mest brukte feltene i tabellen er den primære nøkkelen (CompanyId ), et enkelt datafelt (CompanyName) og en fremmed nøkkel (IndustryId). Hvis det er indekser på disse feltene, som er garantert for den primære nøkkelen, og ekstremt sannsynlig for den utenlandske nøkkelen, siden ellers databaseprestasjonen din ville suge, vil spørsmål som bare refererer til disse feltene, i mange tilfeller være tilfredse helt fra indeksene . Selve databasesidene blir ikke lest. Du kan sjekke dette selv ved å be om en plan for gjennomføring av spørringen fra spørringsanalysatoren. Hvis utførelsesplanen bruker en «indeks-søk» eller «indeks-spole», bruker den en indeks for å bygge søkeresultatene. Hvis primærnøkkelindeksen er gruppert, er situasjonen noe annerledes, men jeg overlater den til deg til å undersøke hva en klynget indeks er i SQL Server og hvordan den endrer måten databasen er lagret og tilgang til. Generelt sett, hvis SQL Server kan konstruere et resultatsett ved hjelp av data fra en indeks, vil det gjøre det i stedet for å bruke databasetabelsidene, fordi det betyr å lese mindre data. En indeks er strukturert identisk med en tabell, bortsett fra at den bare har kolonnene som er spesifisert i indeksen, pluss et radfinner-felt som er en peker til hvor raden er lagret; den pekeren (24 byte) er vanligvis mindre enn selve raddataene, og så vil nesten alltid flere indeks tabellrader enn tabellrader passe inn i en databaseside.
Databasesidestørrelsen i SQL Server er satt til 8192 byte. 96 byte av siden brukes til en overskrift; dette pluss andre overhead etterlater en maksimal radstørrelse på 8060 byte. Imidlertid vil SQL Server 2008 tillate varchar-, nvarchar-, varbinary- og sql\_variant-kolonnene å overskride denne grensen, og vil flytte disse feltene til å flyte over sider når deres inkludering i en rad vil føre til at en rad overskrider denne radstørrelsesgrensen. I tillegg lagres alltid tekst, ntext, image, nvarchar (max), varchar (max), varbinary (max) og xml kolonner på separate sider, uansett hvor mye data som faktisk er lagret i kolonnen. Tabelldefinisjonen du har lagt ut viser totale kolonnebredder som langt overstiger 8060 bytegrensen, men det meste av dette er i varchar (n) -felt, så du vil ende opp med radoverløpssider for rader der den faktiske størrelsen på variabelen bredde kolonner er tilstrekkelig stor. Antall sider som en rad vil bruke i denne tabellen vil derfor variere, avhengig av hvor lenge dataene som faktisk er lagret i kolonnene med variabel bredde er for hver rad.
Når det bare er noen få felt som ofte brukes, når det gjelder forbedring av ytelsen, kan du sannsynligvis få like mye forbedring bare ved å sikre at felt og kombinasjoner av felt som du ofte bruker er tilgjengelige som indekser. Dette vil bety at de fleste radsett kan fylles ut fra indeksdata i stedet for tabelldata, noe som vil unngå problemer med å laste inn store rader fra databasen. Best av alt, dette kan gjøres helt på DBA-nivå; applikasjonen trenger ikke å skrives om for å gjenspeile endringen i skjemaet forårsaket av å legge til (eller fjerne) indekser. Og åpenbart vil enhver kolonne du vil bruke som en del av en sammenføyning, indekseres. Ellers vil du gjøre tabell skanner for de sammenføyningene som er ganske treg.
Jeg kan foreslå at du vurderer ntext i stedet for store nvarchar-felt for noen av de større feltene, selv om dette kan kreve endringer i applikasjonskoden fordi tekstens semantikk / ntekst er forskjellig fra de for varchar / nvarchar. Tekst / ntekstkolonner er alltid lagret på LOB-sider, i stedet for betinget lagret på raddatasiden, og hvis disse kolonnene ofte er tilstede og av moderat størrelse (si , 1000-2000 byte), lagring av dem som tekst / ntekst vil holde resten av raddatasidene mindre og kan gi rom for flere rader per side, noe som vil øke hastighetstabellen for skanninger som ikke faktisk trenger å referere til disse kolonnene.