Pertanyaan ini mirip dengan Mengoptimalkan Pencarian Rentang IP? tapi itu terbatas pada SQL Server 2000.
Misalkan saya memiliki 10 juta rentang untuk sementara disimpan dalam tabel terstruktur dan diisi seperti di bawah ini.
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
Saya perlu tahu semua rentang yang berisi nilai 50,000,000
. Saya mencoba pertanyaan berikut
SELECT *
FROM MyTable
WHERE 50000000 BETWEEN RangeFrom AND RangeTo
SQL Server menunjukkan bahwa ada 10.951 pembacaan logis dan hampir 5 juta baris dibaca untuk mengembalikan 12 pencocokan.
Bisakah saya meningkatkan kinerja ini? Setiap restrukturisasi tabel atau indeks tambahan baik-baik saja.
contains
permintaan dan sementara mereka bekerja dengan baik dalam mengurangi jumlah data yang dibaca mereka tampaknya menambahkan lainnya overhead yang mengatasi ini.