Так у меня есть 2 таблицы, которые выглядят как этотэффективно объединять таблицы интервалами (сложные)
___A___ _____B____
id | a id | s | e
1 | 5 1 | 4 | 6
2 | 4 2 | 2 | 7
3 | 3 3 | 3 | 4
4 | 1 | 5
таблицы А и имеет приблизительно 1500000 и 200000 строк соответственно. Я хочу, чтобы соединить таблицы наименьшим интервалом, который A.a находится в.
Это мой запрос, но это очень медленно
select A.a,
B.s,
B.e
from A
join B
on A.a > B.s
and A.a < B.e
and (B.e - B.s) = (
select min(B.e - B.s)
from B
where A.a > B.s
and A.a < B.e
)
подзапрос используется, чтобы убедиться, что мы используем наименьший интервал. Есть ли способ ускорить этот запуск?
Благодаря
1. Сколько интервалов будет один «a'typically поместиться внутри? 2. Какие индексирования у вас есть? 3. Вы решили не использовать тип диапазона, и если да, почему бы и нет? –
'NOT EXISTS()' variant * может * быть более эффективным (но он все равно нуждается в правильных индексах, очевидно) – wildplasser
Отправьте план выполнения вашего текущего запроса, пожалуйста. – Andreas