현재 저는 50,000,000 개의 행을 가진 테이블을 가지고 있으며이 테이블은 ip_start 및 ip_end 인 두 Varbinary (16) 열에 대한 인덱스가 있습니다. SQL Server varbinary 클러스터 된 인덱스 조회가 특정 범위에서 느립니다.
PRIMARY KEY CLUSTERED
(
[ip_end] ASC,
[ip_start] ASC
)
테이블의 처음 몇 행
는 다음과 같습니다 는ip_start ip_end id
0x00000000 0x00000000 0
0x00000001 0x000000FF 1
0x00000100 0x00FFFFFF 2
0x01000000 0x010000FF 3
우리가 일치를 찾기 위해 사용하는 쿼리입니다 : 내가 조회하면
SELECT TOP 1 id
FROM dbo.ip_ranges WITH (NOLOCK)
WHERE @lookup <= ip_end AND @lookup >= ip_start
는 IP와 같은 0x00000002
는 반환 id 1을 즉시 찾지 만, 0x000000000000001
과 같은 범위 사이의 범위를 검색하면 NULL을 반환하는 데 몇 초가 걸립니다. SQL Server는 varbinary 인덱스가 정렬되어 있으므로 일치하는 항목이없는 경우 신속하게 반환해야합니까?
일부 IP가 범위 또는 더 좋은 방법으로 표를 색인화하여 손실로 인해 큰 히트가 발생하지 않도록 예측할 수있는 더 나은 방법이 있습니까?