최상의 답변
테이블 버스 팅은 식당에서 일하는 것입니다. 고객끼리 테이블을 청소하는 것입니다. 여기에는 더럽거나 사용한 물건 (접시,은 제품, 냅킨)을 모두 제거한 다음 테이블을 닦는 것이 포함됩니다.
이 작업의 전통적인 직함은 “busboy”이지만이 일을하는 모든 사람이 소년 인 것은 아닙니다. . 지금은 더 성 중립적 인 용어가있을 수 있습니다.
답변
설명한 시나리오에서 테이블에서 가장 일반적으로 사용되는 필드가 기본 키 (CompanyId ), 단일 데이터 필드 (CompanyName) 및 외래 키 (IndustryId). 기본 키에 대해 보장되고 외래 키에 대해 매우 가능성이 높은 이러한 필드에 인덱스가있는 경우, 그렇지 않으면 데이터베이스 성능이 좋지 않기 때문에 이러한 필드 만 참조하는 쿼리는 대부분의 경우 만족됩니다 전체 색인에서 가져옴 . 데이터베이스 페이지 자체는 읽히지 않습니다. 쿼리 분석기에서 쿼리 실행 계획을 요청하여 직접 확인할 수 있습니다. 실행 계획이 “인덱스 탐색”또는 “인덱스 스풀”을 사용하는 경우 인덱스를 사용하여 쿼리 결과를 작성합니다. 기본 키 인덱스가 클러스터 된 경우 상황이 다소 다르지만 저는 그대로 두겠습니다. SQL Server에서 클러스터 된 인덱스가 무엇인지, 그리고 데이터베이스 저장 및 액세스 방식이 어떻게 변경되는지 조사해야합니다. 일반적으로 SQL Server가 인덱스의 데이터를 사용하여 결과 집합을 생성 할 수 있다면 데이터베이스 테이블 페이지를 사용하는 대신 그렇게 할 것입니다. 이는 더 적은 데이터를 읽는 것을 의미하기 때문입니다. 인덱스는 인덱스에 지정된 열과 행이 저장되는 위치에 대한 포인터 인 행 로케이터 필드 만 있다는 점을 제외하면 테이블과 동일하게 구조화됩니다. 해당 포인터 (24 바이트)는 일반적으로 행 데이터 자체보다 작기 때문에 거의 항상 테이블 행보다 많은 인덱스 테이블 행이 데이터베이스 페이지에 맞습니다.
SQL Server의 데이터베이스 페이지 크기는 8192로 고정되어 있습니다. 바이트. 페이지의 96 바이트가 헤더에 사용됩니다. 이 외에 다른 오버 헤드를 더하면 최대 행 크기는 8060 바이트가됩니다. 그러나 SQL Server 2008에서는 varchar, nvarchar, varbinary 및 sql\_variant 열이이 제한을 초과 할 수 있도록 허용하고 행에 포함되어 행이이 행 크기 제한을 초과하는 경우 이러한 필드를 오버플로 페이지로 이동합니다. 또한 text, ntext, image, nvarchar (max), varchar (max), varbinary (max) 및 xml 열은 실제로 열에 저장된 데이터 양에 관계없이 항상 별도의 페이지에 저장됩니다. 게시 한 테이블 정의에는 8060 바이트 제한을 훨씬 초과하는 총 열 너비가 표시되지만 대부분은 varchar (n) 필드에 있으므로 변수의 실제 크기가있는 행에 대한 행 오버플로 페이지로 끝납니다. 너비 열이 충분히 큽니다. 따라서이 테이블에서 행이 사용할 페이지 수는 가변 너비 열에 실제로 저장된 데이터가 각 행에 대해 얼마나 오래 있는지에 따라 달라집니다.
성능 향상 측면에서 일반적으로 사용되는 필드가 몇 개뿐이라면 일반적으로 사용하는 필드와 필드 조합을 색인으로 사용할 수 있는지 확인하는 것만으로도 많은 향상을 얻을 수 있습니다. 이는 대부분의 행 집합을 테이블 데이터 대신 인덱스 데이터로 채울 수 있음을 의미하므로 데이터베이스에서 큰 행을로드하는 문제를 방지 할 수 있습니다. 무엇보다도이 작업은 전적으로 DBA 수준에서 수행 할 수 있습니다. 인덱스 추가 (또는 제거)로 인한 스키마 변경을 반영하기 위해 응용 프로그램을 다시 작성할 필요가 없습니다. 조인의 일부로 사용할 모든 열은 인덱싱되어야합니다. 그렇지 않으면 작업을 수행하게됩니다. 테이블은 실제로 매우 느린 조인을 스캔합니다.
텍스트의 의미론 때문에 응용 프로그램 코드를 변경해야 할 수도 있지만 이러한 큰 필드 중 일부에 대해서는 큰 nvarchar 필드 대신 ntext를 고려하는 것이 좋습니다. / ntext는 varchar / nvarchar의 텍스트와 다릅니다. text / ntext 열은 행 데이터 페이지에 조건부로 저장되는 대신 LOB 페이지에 항상 저장되며 이러한 열이 자주 있고 적당한 크기 (예 : , 1000-2000 바이트),이를 text / ntext로 저장하면 나머지 행 데이터 페이지를 더 작게 유지하고 페이지 당 더 많은 행을 허용하여 실제로 이러한 열을 참조 할 필요가없는 테이블 스캔 속도를 높일 수 있습니다.