Paras vastaus
Pöytien pelaaminen on työtä ravintolassa. Se tarkoittaa pöydän puhdistamista asiakkaiden välillä. Tähän sisältyy kaikkien likaantuneiden tai käytettyjen esineiden (astiat, hopeaesineet, lautasliinat) poistaminen ja pöydän pyyhkiminen.
Perinteinen työnimike on ”busboy”, mutta kaikki, jotka tekevät tätä työtä, eivät ole poikia. . Sille voi olla nyt sukupuolineutraali termi.
Vastaus
Kuvaamassasi skenaariossa ilmoitat, että taulukon yleisimmin käytetyt kentät ovat ensisijainen avain (CompanyId ), yksi tietokenttä (Yrityksen nimi) ja vieras avain (IndustryId). Jos näissä kentissä on hakemistoja, mikä on taattu ensisijaiselle avaimelle ja erittäin todennäköiselle ulkomaiselle avaimelle, koska muuten tietokannan suorituskyky imee, kyselyt, jotka viittaavat vain näihin kenttiin, täyttyvät monissa tapauksissa kokonaan hakemistoista . Itse tietokannan sivuja ei lueta. Voit tarkistaa tämän itse pyytämällä kyselyn suoritussuunnitelmaa kyselyanalysaattorilta. Jos suoritussuunnitelmassa käytetään ”hakuhakua” tai ”indeksirullaa”, se käyttää hakemistoa kyselytulosten luomiseen. Jos ensisijaisen avaimen hakemisto on klusteroitu, tilanne on hieman erilainen, mutta jätän sen sinun on tutkittava, mikä klusteroitu hakemisto on SQL Serverissä ja miten se muuttaa tapaa, jolla tietokanta tallennetaan ja sitä käytetään. Yleensä, jos SQL Server pystyy rakentamaan tulosjoukon käyttämällä hakemiston tietoja, se tekee sen tietokantataulukon sivujen käyttämisen sijaan, koska se tarkoittaa vähemmän tietojen lukemista. Hakemisto on rakennettu identtisesti taulukkoon, paitsi että siinä on vain hakemistossa määritetyt sarakkeet sekä rivinhakukenttä, joka osoittaa, mihin rivi on tallennettu. kyseinen osoitin (24 tavua) on tyypillisesti pienempi kuin itse rividata, joten lähes poikkeuksetta enemmän hakemistotaulukkorivejä kuin taulukkorivejä mahtuu tietokantasivulle.
SQL Serverin tietokannan sivukoko on kiinteä 8192 tavua. 96 tavua sivua käytetään otsikkoon; tämä plus muut yleiskustannukset jättävät rivikoon enintään 8060 tavua. SQL Server 2008 antaa kuitenkin varchar-, nvarchar-, varbinary- ja sql\_variant-sarakkeiden ylittää tämän rajan ja siirtää nämä kentät ylivuotosivuille, kun niiden sisällyttäminen riviin aiheuttaisi rivin ylittävän tämän rivin kokorajoituksen. Myös teksti-, ntext-, kuva-, nvarchar- (max), varchar- (max), varbinaariset (max) ja xml-sarakkeet tallennetaan aina erillisille sivuille riippumatta siitä, kuinka paljon dataa sarakkeeseen on todella tallennettu. Lähettämäsi taulukon määritelmä näyttää sarakkeiden kokonaisleveydet, jotka ylittävät selvästi 8060 tavun rajan, mutta suurin osa tästä on varchar (n) -kentissä, joten päädyt rivien ylivuotosivuille riveille, joissa muuttujan todellinen koko leveys sarakkeet on riittävän suuri. Siksi sivujen määrä, jota rivi käyttää tässä taulukossa, vaihtelee sen mukaan, kuinka kauan muuttujan leveyden sarakkeisiin tosiasiallisesti tallennetut tiedot ovat kullekin riville.
Suorituskyvyn parantamisen kannalta, jos sinulla on vain muutama yleisesti käytetty kenttä, voit todennäköisesti saada yhtä paljon parannusta pelkästään varmistamalla, että yleisesti käyttämäsi kentät ja kenttäyhdistelmät ovat saatavilla hakemistoina. Tämä tarkoittaa, että suurin osa riveistä voidaan täyttää hakemistotiedoista taulukkotietojen sijaan, mikä välttää ongelmat suurten rivien lataamisessa tietokannasta. Mikä parasta, tämä voidaan tehdä kokonaan DBA-tasolla; sovellusta ei tarvitse kirjoittaa uudestaan, jotta se kuvastaisi indeksin lisäämisen (tai poistamisen) aiheuttamaa muutosta skeemassa. Ja tietysti kaikki sarakkeet, joita käytät osana liittymistä, on indeksoitava; muuten teet taulukko etsii niitä liittymiä, jotka ovat todellakin melko hitaita.
Voisin ehdottaa, että otat ntekstiä suurten nvarchar-kenttien sijasta joillekin näistä suuremmista kentistä, vaikka tämä saattaa vaatia muutoksia sovelluskoodiin, koska tekstin semantiikka / ntext ovat erilaisia kuin varchar / nvarchar. Teksti / ntext-sarakkeet aina tallennetaan aina LOB-sivuille sen sijaan, että ne tallennettaisiin ehdollisesti rivin tietosivulle, ja jos nämä sarakkeet ovat usein läsnä ja kohtuullisia (sano , 1000-2000 tavua), niiden tallentaminen tekstinä / ntekstinä pitää loput rivin tietosivut pienemmiksi ja saattaa sallia enemmän rivejä sivua kohden, mikä nopeuttaa taulukon skannauksia, joiden ei tarvitse viitata näihin sarakkeisiin.