Câu hỏi này tương tự như Tối ưu hóa phạm vi tìm kiếm IP? nhưng cái đó bị giới hạn trong SQL Server 2000.
Giả sử tôi có 10 triệu phạm vi được lưu trữ tạm thời trong một bảng có cấu trúc và dân cư như dưới đây.
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
Tôi cần biết tất cả các phạm vi có chứa giá trị 50,000,000
. Tôi thử truy vấn sau
SELECT *
FROM MyTable
WHERE 50000000 BETWEEN RangeFrom AND RangeTo
SQL Server cho thấy đã có 10.951 lượt đọc logic và gần 5 triệu hàng đã được đọc để trả về 12 kết quả khớp.
Tôi có thể cải thiện hiệu suất này không? Bất kỳ sự tái cấu trúc của bảng hoặc các chỉ mục bổ sung là tốt.
contains
các truy vấn và trong khi chúng hoạt động tốt trong việc giảm lượng dữ liệu đọc mà chúng dường như thêm vào trên cao mà chống lại điều này.