Найти все диапазоны, пересекающиеся с заданным диапазоном

У меня есть таблица 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 .


person Jitendra Rathor    schedule 16.02.2015    source источник
comment
Пожалуйста, опубликуйте свое рабочее решение.   -  person Felix Pamittan    schedule 16.02.2015
comment
Было бы лучше, если бы вы предоставили нам код, который вы используете, иначе как мы узнаем, является ли он оптимальным/не оптимальным? Также вы ссылаетесь на другой вопрос о SE, но он включает две таблицы. Вы заботитесь только об оптимизации этой части?   -  person Turophile    schedule 16.02.2015
comment
Почему -1 за вопрос?   -  person Jitendra Rathor    schedule 16.02.2015


Ответы (1)


Вы можете использовать запрос ff, чтобы получить перекрывающиеся диапазоны.

SELECT 
    *
FROM #Range
WHERE
    @e >= StartR
    AND EndR >= @s

Вероятно, вам следует добавить индекс на (StartR, EndR).

CREATE NONCLUSTERED INDEX NCIX_Range ON #Range(StartR,EndR)
person Felix Pamittan    schedule 16.02.2015
comment
Он работает так же, как и первое решение. - person Jitendra Rathor; 16.02.2015
comment
@JitendraRathor, но ваши решения не охватывают все возможности - person t-clausen.dk; 16.02.2015