यह प्रश्न ऑप्टिमाइज़िंग आईपी रेंज सर्च के समान है ? लेकिन यह SQL Server 2000 के लिए प्रतिबंधित है।
मान लीजिए कि मेरे पास 10 मिलियन श्रेणियां हैं जो अस्थायी रूप से एक तालिका में संग्रहीत हैं और नीचे की तरह आबाद हैं।
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
मुझे सभी रेंजों को जानना होगा, जिसमें मूल्य हो 50,000,000
। मैं निम्नलिखित प्रश्न का प्रयास करता हूं
SELECT *
FROM MyTable
WHERE 50000000 BETWEEN RangeFrom AND RangeTo
SQL सर्वर से पता चलता है कि 10,951 तार्किक रीड थे और 12 मिलान वाले को वापस करने के लिए लगभग 5 मिलियन पंक्तियों को पढ़ा गया था।
क्या मैं इस प्रदर्शन में सुधार कर सकता हूं? तालिका या अतिरिक्त अनुक्रमित का कोई भी पुनर्गठन ठीक है।
contains
प्रश्नों का समर्थन करते हैं और साथ ही वे डेटा की मात्रा को कम करने में अच्छी तरह से पढ़ते हैं जो वे दूसरे को जोड़ते हैं। ओवरहेड जो इस का प्रतिकार करता है।