Legjobb válasz
Az asztalokkal foglalkozni egy étteremben kell. Ez azt jelenti, hogy meg kell tisztítani az asztalt a vásárlók között. Ez magában foglalja az összes piszkos vagy elhasznált tárgy (edény, ezüst, szalvéta) eltávolítását, majd az asztalról való letörlést.
Ennek hagyományos munkaköre a “busboy”, de nem mindenki fiú, aki ezt a munkát végzi . Lehet, hogy most van rá egy nemileg semlegesebb kifejezés.
Válasz
Az Ön által leírt forgatókönyvben kijelenti, hogy a táblázat leggyakrabban használt mezői az elsődleges kulcsok (CompanyId ), egyetlen adatmező (CompanyName) és egy idegen kulcs (IndustryId). Ha ezeken a mezőkön vannak indexek, amelyek garantáltak az elsődleges kulcs számára, és rendkívül valószínűek az idegen kulcs számára, mivel különben az adatbázis teljesítménye elszívódik, akkor a csak ezekre a mezőkre hivatkozó lekérdezések sok esetben kielégítőek lesznek teljes egészében az indexekből . Maguk az adatbázis-oldalak nem lesznek olvashatók. Ezt maga ellenőrizheti, ha lekérdezés-végrehajtási tervet kér a lekérdező elemzőtől. Ha a végrehajtási terv “index keresést” vagy “index spoolt” használ, akkor egy indexet használ a lekérdezés eredményeinek felépítéséhez. Ha az elsődleges kulcs index fürtbe van foglalva, akkor a helyzet kissé más, de ezt meghagyom meg kell vizsgálnia, hogy mi az a fürtözött index az SQL Server-ben, és hogyan változtatja meg az adatbázis tárolásának és elérésének módját. Általánosságban elmondható, hogy ha az SQL Server képes egy eredménykészletet egy index adatainak felhasználásával elkészíteni, akkor ezt meg fogja tenni az adatbázis-tábla oldalainak használata helyett, mert ez kevesebb adat elolvasását jelenti. Az index a táblához hasonlóan van felépítve, azzal a különbséggel, hogy csak az indexben megadott oszlopok vannak rajta, plusz egy sor lokátor mező, amely mutató a sor tárolására; ez a mutató (24 bájt) általában kisebb, mint a soradatok, és ezért szinte mindig több indextábla-sor, mint táblasor fér el egy adatbázis-oldalon.
Az SQL Server adatbázis-oldalának mérete 8192. bájtokat. Az oldal 96 bájtját fejlécként használják; ez plusz az egyéb rezsi legfeljebb 8060 bájtos sorméretet hagy. Az SQL Server 2008 azonban lehetővé teszi, hogy a varchar, nvarchar, varbinary és sql\_variant oszlopok túllépjék ezt a korlátot, és ezeket a mezőket túlcsorduló oldalakra helyezi át, amikor egy sorba való felvételük miatt egy sor túllépi a sor méretkorlátját. Ezenkívül a szöveg, az ntext, a kép, a nvarchar (max), a varchar (max), a varbinary (max) és az xml oszlopok mindig külön oldalakon vannak tárolva, függetlenül attól, hogy az oszlopban ténylegesen mennyi adat tárolódik. Az általad közzétett táblázatdefiníció a teljes oszlopszélességet mutatja, amely messze meghaladja a 8060 bájtos korlátot, de ennek nagy része a varchar (n) mezőkben található, így sorok túlcsorduló oldalai lesznek azoknál a soroknál, ahol a változó tényleges mérete szélességű oszlopok kellően nagyok. Az ebben a táblázatban egy sor által használt oldalak száma tehát változó, attól függően, hogy a változó szélességű oszlopokban ténylegesen tárolt adatok mennyi ideig vannak az egyes sorokhoz.
A teljesítmény javítása szempontjából, ha csak néhány általánosan használt mező van, akkor valószínűleg annyi javulást érhet el, ha csak azt biztosítja, hogy az általánosan használt mezők és mezők kombinációi elérhetőek legyenek indexekként. Ez azt jelenti, hogy a legtöbb sor az indexadatokból tölthető fel a táblaadatok helyett, ami elkerüli a nagy sorok adatbázisból történő betöltésével kapcsolatos problémákat. A legjobb az egészben, hogy ezt teljes egészében DBA szinten lehet megtenni; az alkalmazást nem kell átírni, hogy tükrözze a séma változását, amelyet indexek hozzáadása (vagy eltávolítása) okoz. És nyilván minden oszlopot, amelyet csatlakozás részeként fog használni, indexelni kell; különben ezt meg fogja tenni tábla beolvassa azokat a csatlakozásokat, amelyek valóban meglehetősen lassúak.
Javasolhatom, hogy a nagyobb nvarchar mezők helyett az ntextet vegye figyelembe néhány nagyobb mező esetében, bár ehhez szükség lehet az alkalmazás kódjának megváltoztatására, mert a szöveg szemantikája Az / ntext eltér a varchar / nvarcharétól. A szöveg / ntext oszlopok mindig mindig LOB oldalakon vannak tárolva, ahelyett, hogy feltételesen a soradatok oldalon tárolódnának, és ha ezek az oszlopok gyakran vannak és közepes méretűek (mondjuk , 1000-2000 bájt), szövegként / ntextként tárolva a sor többi oldalát kisebbnek tartja, és oldalanként több sort is megengedhet, ami felgyorsítja a táblázatok beolvasását, amelyeknek valójában nem kell hivatkozniuk ezekre az oszlopokra.