У меня есть таблица Range. Который имеет начало и конец диапазонов. Я хочу знать, какие диапазоны в таблице диапазонов перекрываются с заданным диапазоном.
For Ex -
Range Table
RId Start End
1 1 2
2 3 5
3 10 20
4 6 8
Given range : 2-8
Затем я должен вернуть Rids перекрывающихся диапазонов, т.е. 1,2,4.
У меня есть решение для этого, которое работает. Но я ищу оптимизацию производительности.
Range Table size = 680 million rows
Start and End are BIGINT type.
This is an extension of
http://stackoverflow.com/questions/27580384/range-queries-on-2-columns
Here result may be more 1 rows
Отредактировано -
Here is my current solution -
CREATE TABLE #Range
(
RID int,
StartR BIGINT,
EndR BIGINT)
INSERT INTO #Range
SELECT 1, 1 , 2 UNION ALL
SELECT 2, 3, 5 UNION ALL
SELECT 3, 10, 20 UNION ALL
SELECT 4, 6, 8
DECLARE @s BIGINT = 2, @e BIGINT = 8
SELECT
RId
FROM #Range
WHERE
@e >= StartR
AND EndR >= @s
Я создал 2 отдельных индекса для Start и End и один для Start и End .