Bu soru IP Aralığı Arama Optimizasyonu'na benzer mi? ancak bu SQL Server 2000 ile sınırlıdır.
Aşağıdaki şekilde yapılandırılmış ve doldurulmuş bir tabloda geçici olarak depolanmış 10 milyon aralığım olduğunu varsayalım.
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
Değeri içeren tüm aralıkları bilmek gerekir 50,000,000
. Aşağıdaki sorguyu deniyorum
SELECT *
FROM MyTable
WHERE 50000000 BETWEEN RangeFrom AND RangeTo
SQL Server, 10.951 mantıksal okuma olduğunu ve eşleşen 12 kelimeyi döndürmek için yaklaşık 5 milyon satır okunduğunu gösterir.
Bu performansı artırabilir miyim? Tablonun veya ek dizinlerin yeniden yapılandırılması iyidir.
contains
sorguları destek olarak yardımcı olabilir umuyordum ve onlar iyi okuma veri miktarını azaltmak gibi çalışırken diğer eklemek gibi görünüyor buna karşı ek yük.