Равнозначны ли условия ? (туплю)

anvano
Дата: 23.10.2015 16:12:24
WHERE  date1  BETWEEN date2-1 AND date2+1


и

WHERE  date2  BETWEEN date1-1 AND date1+1


можно ли первое условие заменить вторым, чтобы индекс по date2 подхватился ...
AlexFF__|
Дата: 23.10.2015 16:25:04
anvano
WHERE  date1  BETWEEN date2-1 AND date2+1


и

WHERE  date2  BETWEEN date1-1 AND date1+1


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

BETWEEN date2-1 AND
Заменяется на <= and >=
dbms_photoshop
Дата: 23.10.2015 16:40:25
anvano,

У меня для тебя плозие новости: условия не равнозначные, индекс все равно не подхватится.
mcureenab
Дата: 23.10.2015 16:48:09
date1  BETWEEN date2-1 AND date2+1
=>

date2-1<=date1 AND date1 <= date2+1


и

date2  BETWEEN date1-1 AND date1+1
=>

date1-1<=date2 AND date2<=date1+1
=>

date2>=date1-1 AND date1+1>=date2 
=>

date2+1>=date1 AND date1>=date2-1 
=>

date1>=date2-1 AND date2+1>=date1 
=>

date2-1 <= date1 AND date1 <= date2+1


"а по моему они одинаковые" (c)
AlexFF__|
Дата: 23.10.2015 16:50:15
dbms_photoshop
anvano,

У меня для тебя плозие новости: условия не равнозначные, индекс все равно не подхватится.

Ну а я порадую, и условия одинаковые и индекс может подхватиться )
Да ну
Дата: 23.10.2015 16:54:46
anvano,

Условия равнозначные, но для доступа по индексу нужен FBI по (date2-date1):
where date2-date1 between -1 and 1
mcureenab
Дата: 23.10.2015 17:05:52
Да ну
anvano,

Условия равнозначные, но для доступа по индексу нужен FBI по (date2-date1):
where date2-date1 between -1 and 1


зачем? и какой индекс может быть, если поля в разных таблицах или date1 - переменная?
dbms_photoshop
Дата: 23.10.2015 17:25:02
AlexFF__|,

Условия таки одинаковые если протереть глаза, а вот с индексом по прежнему новости не очень. :))
anvano
Дата: 23.10.2015 17:28:15
Это оба столбцы, даже один и тот же столбец при селф джоине


SELECT t1.*,  t2.*

FROM    my_table  t1,  my_table t2

WHERE  <тут поскипаны всякие условия на t1  (то есть по ней не fullscan) >

AND      t2.parent_id  = t1.id
AND      t1.start_date   BETWEEN  t2.start_date - 1  AND  t2.start_date +1


Есть индекс на my_table (parent_id, start_date)

Вот почему-то в оригинальном виде (как привел) запрос выполняется очень долго (хотя в плане - индекс видно что подхватывается)

А если условие заменить на
AND      t2.start_date   BETWEEN  t1.start_date - 1  AND  t1.start_date +1


то запрос просто летает (и это не из-за того, что данные закешировались, я даже ребут сервера целиком делал между запросами)

Вот я и думаю, равнозначные условия или нет.
С точки зрения математики - да. Но оракл - не математика :)
anvano
Дата: 23.10.2015 17:29:06
Да, выборки идентичные получаются, но вдруг "магия данных" (с) Elic и всё такое ....