이 질문은 IP 범위 검색 최적화 와 비슷 합니까? 그러나 그 중 하나는 SQL Server 2000으로 제한됩니다.
다음과 같이 구조화되고 채워진 테이블에 천만 개의 범위가 임시로 저장되어 있다고 가정하십시오.
CREATE TABLE MyTable
(
Id INT IDENTITY PRIMARY KEY,
RangeFrom INT NOT NULL,
RangeTo INT NOT NULL,
CHECK (RangeTo > RangeFrom),
INDEX IX1 (RangeFrom,RangeTo),
INDEX IX2 (RangeTo,RangeFrom)
);
WITH RandomNumbers
AS (SELECT TOP 10000000 ABS(CRYPT_GEN_RANDOM(4)%100000000) AS Num
FROM sys.all_objects o1,
sys.all_objects o2,
sys.all_objects o3,
sys.all_objects o4)
INSERT INTO MyTable
(RangeFrom,
RangeTo)
SELECT Num,
Num + 1 + CRYPT_GEN_RANDOM(1)
FROM RandomNumbers
value를 포함하는 모든 범위를 알아야합니다 50,000,000
. 나는 다음과 같은 쿼리를 시도
SELECT *
FROM MyTable
WHERE 50000000 BETWEEN RangeFrom AND RangeTo
SQL Server는 일치하는 12 개의 것을 반환하기 위해 10,951 개의 논리적 읽기가 있었고 거의 5 백만 개의 행이 읽 혔음을 보여줍니다.
이 성능을 향상시킬 수 있습니까? 테이블 또는 추가 인덱스의 재구성은 괜찮습니다.
contains
쿼리 를 지원 하고 여기에서 도움이 될 것으로 기대하면서 데이터 읽기 양을 줄이는 데 도움이되기를 바랍니다. 이에 대응하는 오버 헤드.