У меня есть таблица под названием Range. Который имеет начало и конец диапазона. Я хочу знать, каковы диапазоны в таблице 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
Edited -
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 и один на старте и End.
Просьба указать ваше рабочее решение. –
Было бы лучше, если бы вы дали нам код, который используете - иначе как мы узнаем, если он/не является оптимальным? Также вы ссылаетесь на другой вопрос по SE, но это включает две таблицы. Вы только заботитесь об оптимизации этой части? – Turophile
Почему -1 для вопроса? –