아래 SQL문은 Optimizer mode가 cost-base 고 hash_join이
disable 되어 있으면 access 순서가
아마도 book_ca --> book --> publisher 순으로 될 것 같은데요?
이런 상황에서는 b.title 칼럼이 추가되던 아니던 관계가 없을 것입니다.
그러나 다른 상황이라면 달라질 수 있습니다.
( 특히 고 hash_join이 enable 되어 있으면 ... )
힌트를 적용하시는 것도 한 방법입니다.
SELECT /*+ INDEX_DESC(a book_idx_12)
INDEX(b book_idx_xxx)
*/
....
>>이기태 님께서 쓰시길<<
:: SELECT --+ INDEX_DESC(a book_idx_12)
:: rownum n, a.bo_id, a.title aa, a.title_orig, a.title_sec, a.selling_price, a.discount_rate,
::
:: a.img_file, a.s_info, a.supplement, a.fmt, a.page, a.pub_dt, a.isbn, a.stock, a.stock_cnt, a
:: .limit_cnt, b.pub_id, b.title
:: FROM book a, publisher b
:: WHERE a.pub_id = b.pub_id
:: AND a.bo_id IN
:: (
:: SELECT --+ INDEX(book_ca book_ca_idx_01)
:: bo_id
:: FROM book_ca
:: WHERE ca_id = 2780
:: )
::
:: 이 쿼리에서
::
:: 마지막에 나오는 b.title 부분을 안 뽑아 내면
:: publisher 테이블은 index unique scan pk_publisher으로 되는데.
:: b.title을 뽑아내면
:: publisher 테이블을 full scan join 합니다.
::
:: 당연히 속도가 전혀 안나옵니다. 10분 -0-
::
:: 왜 이런가요?
::
:: b.title을 추가하지 않으면 괜찮은데 추가만 하면 바보가 되니...
:: 그럼
|