Co oznacza ' bussing table ' znaczy?


Najlepsza odpowiedź

Stoły do ​​autobusów to praca w restauracji. Oznacza to czyszczenie stołu między klientami. Obejmuje to usunięcie wszystkich brudnych lub używanych przedmiotów (naczyń, sztućców, serwetek), a następnie wycieranie ich ze stołu.

Tradycyjne stanowisko to „pomocnik kelnera”, ale nie każdy, kto wykonuje tę pracę, to chłopiec . Może być teraz bardziej neutralny pod względem płci termin.

Odpowiedź

W opisywanym scenariuszu stwierdzasz, że najczęściej używane pola w tabeli to klucz podstawowy (CompanyId ), jedno pole danych (CompanyName) i klucz obcy (IndustryId). Jeśli istnieją indeksy na tych polach, co jest gwarantowane dla klucza podstawowego i jest bardzo prawdopodobne dla klucza obcego, ponieważ w przeciwnym razie wydajność bazy danych byłaby do niczego, wówczas zapytania odwołujące się tylko do tych pól w wielu przypadkach będą spełnione w całości z indeksów . Same strony bazy danych nie zostaną odczytane. Możesz to sprawdzić samodzielnie, żądając planu wykonania zapytania z analizatora zapytań. Jeśli plan wykonania używa „przeszukiwania indeksu” lub „buforu indeksów”, to używa indeksu do budowania wyników zapytania. Jeśli indeks klucza podstawowego jest zgrupowany, sytuacja jest nieco inna, ale zostawię to zbadać, czym jest indeks klastrowy w programie SQL Server i jak zmienia on sposób przechowywania bazy danych i uzyskiwania do niej dostępu. Ogólnie rzecz biorąc, jeśli SQL Server może skonstruować zestaw wyników przy użyciu danych z indeksu, zrobi to zamiast używać stron tabeli bazy danych, ponieważ oznacza to odczyt mniej danych. Indeks ma taką samą strukturę jak tabela, z wyjątkiem tego, że zawiera tylko kolumny określone w indeksie oraz pole lokalizatora wierszy, które jest wskaźnikiem do miejsca przechowywania wiersza; ten wskaźnik (24 bajty) jest zwykle mniejszy niż same dane wiersza, więc prawie zawsze więcej wierszy tabeli indeksu niż wierszy tabeli zmieści się na stronie bazy danych.

Rozmiar strony bazy danych w SQL Server jest ustalony na 8192 bajtów. 96 bajtów strony zajmuje nagłówek; to plus inne obciążenie pozostawia maksymalny rozmiar wiersza 8060 bajtów. Jednak SQL Server 2008 zezwoli kolumnom varchar, nvarchar, varbinary i sql\_variant na przekroczenie tego limitu i przeniesie te pola na przepełnione strony, jeśli ich uwzględnienie w wierszu spowodowałoby przekroczenie limitu rozmiaru wiersza. Ponadto kolumny tekst, ntext, obraz, nvarchar (max), varchar (max), varbinary (max) i xml są zawsze przechowywane na osobnych stronach, bez względu na to, ile danych jest faktycznie przechowywanych w kolumnie. Opublikowana przez Ciebie definicja tabeli pokazuje łączne szerokości kolumn, które znacznie przekraczają limit 8060 bajtów, ale większość z nich znajduje się w polach varchar (n), więc skończysz na stronach przepełnienia wierszy dla wierszy, w których rzeczywisty rozmiar zmiennej szerokość kolumn jest wystarczająco duża. Liczba stron, które będą używane w wierszu w tej tabeli, będzie się zatem zmieniać w zależności od tego, jak długo dane faktycznie przechowywane w kolumnach o zmiennej szerokości dla każdego wiersza.

Jeśli chodzi o poprawę wydajności, jeśli masz tylko kilka pól, które są powszechnie używane, prawdopodobnie możesz uzyskać taką samą poprawę, upewniając się, że pola i kombinacje pól, których często używasz, są dostępne jako indeksy. Oznacza to, że większość zestawów wierszy można wypełnić z danych indeksu zamiast z danych tabeli, co pozwoli uniknąć problemów z ładowaniem dużych wierszy z bazy danych. Co najlepsze, można to zrobić całkowicie na poziomie DBA; aplikacja nie musi być przepisywana, aby odzwierciedlić zmianę w schemacie spowodowaną dodaniem (lub usunięciem) indeksów. Oczywiście każda kolumna, której będziesz używać jako części łączenia, powinna być indeksowana; w przeciwnym razie będziesz robić przeszukuje tabele w poszukiwaniu tych złączeń, które są rzeczywiście dość powolne.

Mogę zasugerować rozważenie ntext zamiast dużych pól nvarchar dla niektórych z tych większych pól, chociaż może to wymagać zmian w kodzie aplikacji, ponieważ semantyka tekstu / ntext różnią się od tych z varchar / nvarchar. Kolumny tekstowe / tekstowe są zawsze przechowywane na stronach LOB, zamiast warunkowo przechowywane na stronie danych wierszy, a jeśli te kolumny są często obecne i mają umiarkowany rozmiar (np. , 1000-2000 bajtów), przechowywanie ich jako text / ntext spowoduje, że pozostałe strony danych wierszy będą mniejsze i może pozwolić na więcej wierszy na stronę, co przyspieszy skanowanie tabel, które w rzeczywistości nie muszą odwoływać się do tych kolumn.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *