>

빠른 범위 선택을 위해 테이블에 적절한 색인을 생성하는 방법을 이해하는 데 도움이 필요합니다.

다음 열이있는 테이블이 있습니다 :

---유형

<시간>

frameidx --- int

u --- int

v --- int

x --- float (53)

y --- float (53)

z --- float (53)

<시간>

이 열 중 어느 것도 고유하지 않습니다.

이 표에는 약 3 천만 건의 레코드가 있어야합니다.

평균 검색어는 다음과 같습니다 :

  Select x, y, z from tablename
   Where
       frameidx = 4 AND
       u between 34 AND 500
       v between 0 AND 200

예쁘고 똑 바르고 조인도없고 중첩 된 것도 없습니다. 좋은 ol '하위 세트 선택.

예를 들어 100ms 미만의 레코드 (이 쿼리에서 수천에있을 수 있음)를 100ms 미만으로 가져올 수 있도록이 테이블에 대해 MS SQL Server (2012)에서 어떤 종류의 인덱싱을 수행해야합니까? ?

감사합니다.


  • 답변 # 1

    인덱스가 없으면 SQL Server는 전체 테이블을 스캔하여 필요한 데이터를 찾아야합니다. 큰 테이블 (3 천만 행)의 경우 시간이 많이 걸립니다.

    쿼리에 적합한 인덱스가있는 경우 SQL Server는 인덱스를 검색합니다 (즉, 인덱스 구조를 사용하여 인덱스에서 필요한 행을 빠르게 찾습니다). 색인은 지정된 색인 순서의 색인화 된 열 값과 색인화 된 테이블의 행에 대한 포인터로 구성되므로 색인에서 데이터를 찾으면 색인화 된 테이블의 필요한 데이터가 해당 포인터를 사용하여 복구됩니다.

    SO, 속도를 높이려면 범위를 필터링하는 데 사용할 열에 대한 색인을 만들어야합니다.

    인덱스를 추가하면 쿼리 응답 시간이 향상되지만 더 많은 공간을 차지하고 삽입 속도가 느려집니다. 따라서 많은 색인을 생성해서는 안됩니다.

    항상 필터링을 위해 모든 열을 사용하려는 경우 하나의 색인 만 만들어야합니다. 그리고 이상적으로는 그 지수가 더 선택적인 것, 즉 가장 다른 값 (가장 적은 값의 수)을 갖는 것이어야합니다. 각 검색어에 대해 하나의 색인 만 사용할 수 있습니다.

    다른 범위의 필터를 사용하려면 더 많은 인덱스를 만들어야합니다.

    복합재를 사용하는 것이 좋거나 나쁠 수 있습니다. 복합 키에서 행은 인덱스의 모든 열에 의해 정렬됩니다. 따라서 A, B, C&D로 색인을 제공하면 A로 필터링하거나 순서를 지정하면 색인의 연속 행이 제공되며 빠른 작업입니다. A, B, C&D로 필터링하는 것이이 인덱스에 이상적입니다. 그러나 D 만 필터링하거나 순서를 정하는 것은 인덱스 전체에 분산 된 데이터를 복구해야하기 때문에이 인덱스의 최악의 경우입니다. 데이터는 A, B, C, D 순서로 정렬됩니다. D 정보는 인덱스 전체에 퍼져 있습니다. 여러 가지 요소 (테이블 통계, 인덱스 선택성 등)에 따라 인덱스가 전혀 사용되지 않고 테이블이 스캔 될 수도 있습니다.

    클러스터형 인덱스에 대한 마지막 참고 사항 : 클러스터형 인덱스는 데이터가 테이블에 저장되는 실제 순서를 정의합니다. 고유 할 필요는 없습니다. 대부분의 경우 필터링을 위해 열 중 하나를 사용하는 경우,이 경우 인덱스를 찾고 포인터를 사용하여 인덱스 된 테이블에서 데이터를 찾는 대신 테이블의 클러스터 된 인덱스를 만드는 것이 좋습니다. 테이블을 직접 찾고 성능을 향상시킬 수 있습니다.

    따라서 간단한 대답은 없지만 쿼리 속도를 향상시킬 수있는 정보가 있음을 알고 싶습니다.

    수정

    매우 흥미로운 의견에 따라 수정 된 정보

  • 이전 페이지 메타 보안 헤더를 사용하지 않아야하는 경우
  • 다음 자바 스크립트 '네임 스페이스'및 jQuery AJAX