Oracle Сравнение дат - PullRequest
       0

Oracle Сравнение дат

0 голосов
/ 27 января 2020

У меня есть столбец даты и времени. Если мне нужны данные только за 1 день, какой оператор быстрее, = или between.

TIA

Ответы [ 2 ]

4 голосов
/ 27 января 2020

Если вы имеете в виду:

where col >= date '2020-01-01' and col < date '2020-01-02'

против:

where trunc(col) = date '2020-01-01'

Тогда первый метод обычно считается лучшим. Функция trunc() препятствует оптимизатору (поскольку статистика не так хороша), и Oracle не может использовать индекс только для col.

При этом Oracle поддерживает индексы на основе функций, поэтому если у вас есть индекс на trunc(col), то второй может использовать этот индекс.

0 голосов
/ 27 января 2020

Тип Oracle DATE всегда содержит информацию о дате и времени.

Если вы абсолютно уверены, , что вы всегда сохраняли данные со временем как 00:00:00, вы можете использовать поиск (равенство). Это быстрее.

Однако, я бы проигнорировал это и использовал бы поиск по диапазону (BETWEEN). Это немного медленнее, но все еще довольно быстро. Избегайте использования TRUNC(date) или любых других манипуляций с выражениями, так как это препятствует использованию индекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...