약 49403459
레코드가 들어있는 테이블이 있습니다.날짜에 대한 where 절에서 to_char가있는 Oracle 쿼리를 최적화하는 방법
날짜 범위의 테이블을 쿼리하고 싶습니다. 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.14
초에서 0
결과를 얻을 수 있습니다.
어떻게하면이 쿼리를 빠르게 만들 수 있으며 유효한 결과 (529
)를 얻을 수 있습니까?
이 시점에서 색인을 변경할 수 없습니다. 지금은 색인이 create_date
열에 생성 된 것 같습니다.
두 날짜 범위를 변환하여 첫 번째 날짜 범위가 모두 0 인 타임 스탬프로 변환되고 두 번째 날짜가 날짜의 마지막 타임 스탬프 인 타임 스탬프로 변환되도록하려면 어떻게해야합니까? 그 말이 맞는다면 ...?
중 절은 어떤 결과를 가져옵니다 없습니다 다음 첫 번째 쿼리에서
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')
감사합니다. 나는 그것을 시도했다. 그러나 아직도 나는 어떤 결과도 얻지 않는다. 내 편집을 참조하십시오 – Josh
내 대답을 편집했습니다. 귀하의 두 번째 쿼리가 아마도 정확하다고 생각합니다. 첫 번째 쿼리는 잘못된 결과를 제공합니다. – newdayrising
아니요 ... 테이블을 쿼리하여 오늘 만들어진 레코드가 있는지 확인할 수 있습니다. .. – Josh