2009-11-20 2 views
2

oracle의 select 쿼리에서 index를 사용하는 방법은 무엇입니까? 인덱스를 만들 때 성능을 향상시킬 수 있습니까?오라클의 인덱스 사용

명시 적으로 색인을 사용하는 방법은 무엇입니까?

답변

3

정말 정말 당신을 나쁜 실행 계획을 제공하고

  • 수행 조인을

    SELECT /*+ INDEX(mytable myindex) */ foobar from mytable 
    

    을하지만은 최후의 수단이어야합니다 할 수 있습니다 사용자 최적화 힌트 (매우 드물게 발생,하지만 그런 일이)가 어떤 인덱스를 사용하는 얘기를 해. 그렇게하기 전에

    execute dbms_stats.gather_table_stats('myschema','mytable') 
    

    을 사용하여 오라클이 테이블을 분석하도록하십시오. 잘하면 인덱스를 언제 사용하는지 알 수 있습니다.

  • +2

    데이터베이스 버전 및 특정 매개 변수 설정에 따라 'DBMS_STATS.GATHER_TABLE_STATS'를 호출하면 인덱스 통계가 자동으로 수집되지 않을 수 있습니다. 어떤 경우에는'DBMS_STATS.GATHER_INDEX_STATS'를 사용하거나 명시 적으로'CASCADE' 매개 변수를 설정해야합니다 :'execute dbms_stats.gather_table_stats ('myschema', 'mytable', cascade => TRUE)' – APC

    4

    선택 쿼리에서 인덱스를 사용하기 위해 아무 것도 할 필요가 없습니다. 오라클은 쿼리 수행에 가장 적합한 인덱스를 결정합니다. 색인은 원하는 데이터에 대한 지름길을 제공하여 일부 쿼리 (전부는 아님)에서 성능을 향상시킵니다. Oracle Concepts Guide 의 색인을 읽어야합니다 - "색인 개요"섹션을 읽으십시오.

    2

    일반적으로 인덱스를 사용하기 위해 쿼리에서 아무 말도하지 않아도됩니다. 오라클의 계획 평가자는 쿼리를 실행하는 가장 좋은 방법을 선택할 것입니다. 관계형 데이터베이스에 대한 Codd의 원칙 중 하나입니다.

    인덱스를 만들 때 성능을 향상시킬 수 있습니까?

    몇 가지 시나리오. 당신이 기준을 검색 할 때

    1. : 그들 중 일부는 : 당신이 당신을 정렬 할 때
    2. (즉, 테이블이 큰 당신이 필드에 인덱스가있는 경우 select * from foo where field = 121, 그것은 도움이 될 것입니다) 결과. (예 : select * from foo order by field, 그것은 당신의 테이블이 큰 경우에 도움이 될 것입니다 그리고 당신은 필드에 인덱스가)의 경우 오라클에서