У меня есть таблица, которая содержит около 49403459
записей.
Я хочу запросить таблицу в диапазоне дат. скажем 04/10/2010
до 04/10/2010
. Однако даты хранятся в таблице в формате 10-APR-10 10.15.06.000000 AM
(отметка времени).
В результате, когда я делаю
SELECT bunch,of,stuff,create_date
FROM myTable
WHERE TO_CHAR (create_date,'MM/DD/YYYY)' >= '04/10/2010'
AND TO_CHAR (create_date, 'MM/DD/YYYY' <= '04/10/2010'
Я получаю 529
строк, но за 255.59
секунд! Это потому, что, я думаю, я делаю TO_CHAR на КАЖДОЙ записи.
Однако, когда я делаю
SELECT bunch,of,stuff,create_date
FROM myTable
WHERE create_date >= to_date('04/10/2010','MM/DD/YYYY')
AND create_date <= to_date('04/10/2010','MM/DD/YYYY')
тогда я получу 0
результатов за 0.14
секунд.
Как мне сделать этот запрос быстрым и при этом получить действительные (529
) результаты?
На данный момент я не могу изменить индексы. Сейчас я думаю, что индекс создается для столбца create_date
.
Как можно преобразовать два диапазона дат, чтобы первый диапазон дат преобразовывался в метку времени со всеми 0, а второй - в метку времени, которая является последней меткой времени даты. Если это имеет смысл ...?
Следующее условие where также не приводит ни к каким результатам:
WHERE
create_date >= to_timestamp('04/10/2010 00:00:00.000000','MM/DD/YYYY HH24:MI:SS.FF')
AND
create_date <= to_timestamp('04/10/2010 00:00:00.000000','MM/DD/YYYY HH24:MI:SS.FF')