NETEZZA를 사용하고 있으며 날짜별로 가입하려는 두 개의 별도 테이블이 있습니다. 첫 번째 표에서 날짜는 "날짜"유형 (예 : 2014-09-10)으로 저장되고 두 번째 표에서는 날짜가 "int4"유형으로 저장됩니다 (20140910). 나는 날짜까지 테이블에 합류 해 보았습니다.캐스팅 날짜 (int4)
select *
from table1 a inner join table2 b
on date(a.start_date) = to_date(b.start_date, 'YYYYMMDD')
이것은 실행되지만 느립니다. 필자가 table1에서 날짜를 int4로 변환하고 int4를 단순히 비교할 수 있다면 비교 속도가 훨씬 빨라질 것을 권장합니다. 그러나, 나는 이것을 할 길을 찾지 못했고, 이것이 최선의 방법이라 할지라도.
변환을 다른 방법으로 수행 할 경우 더 빨리 실행되지 않을 수 있습니다. 다른 유형의 키 조인은 일반적으로 느립니다. –
@ GordonLinoff : 적어도 SQL을 처음 접했을 때 어떻게 캐스트를 수행 할 수 있는지 아이디어를 줄 수 있습니까? 그런 다음 작은 사건으로 직접 시간을 테스트 할 수있었습니다. 제 동료 중 한 명은 저에게 행의 수가 적다는 것을 보여주었습니다. 하이픈을 제거하기 위해 table1의 날짜를 부분 문자열로 지정하면 (즉, int4의 형식과 일치하게됩니다)). 물론 훨씬 더 많은 수의 열에 대해서는 사실 일 것이라고 확신하지 못했습니다. – slaw
변환은 데이터베이스가 인덱스를 사용하는 대신 기본 데이터를 전체적으로 스캔하도록합니다. * 필드 중 하나를 다른 필드와 일치하는 유형으로 변환하십시오. 적어도 하나의 색인을 사용할 수 있습니다. 테이블의 필드를 더 적은 수의 행으로 변환하는 것이 바람직합니다. 실제 유형은 실제로 중요하지 않습니다. –