2012-07-02 6 views
1

내가 원하는 것보다 느리게 실행되는 쿼리가 있습니다. 쿼리가 이미 정확하고 리팩토링했지만 신속하게 실행할 수는 없습니다. 가능한 경우 술어는 Sarg-able입니다. 이미 조인을 사용하고 있고, 여분의 테이블을 요청하지 않으며, 불필요하게 행을 복제하거나 중첩 된 서브 쿼리를 느리게하는 방식으로 사용하지 않습니다.이 SQL 쿼리 (인덱스 사용)를 최적화하려면 어떻게합니까?

DBA가 아니기 때문에 쿼리를보다 빠르게 수행 할 수있는 좋은 인덱스를 선택하는 방법을 알지 못합니다. 테이블 구조를 변경할 수 있습니다. 데이터베이스를 담당하는 DBA가 없기 때문에 데이터베이스 서버에 대한 권한이 있습니다.

SQL 쿼리는 어떻게 최적화합니까?

+0

의견 또는 수정 사항/제안 된 수정 사항 및 추가 답변을 환영합니다. –

+1

당신은 어떤 쿼리를 참조하고 있습니까? – swasheck

+5

이것이 너무 일반적이라고 생각합니다. - 블로그 게시판 (답변과 함께 사용)과 같은 장소를 가질 수 있지만 다양한 전략에 대한 실행 계획을 보여주는 구체적인 예가 필요합니다. –

답변

6

소개 : 여기에 대해 많은 이야기가 있습니다. SQL의 복잡성으로 인해 누구나 사용자의 쿼리를 완벽하게 지원하는 것은 불가능합니다. 쿼리가 무엇인지, 테이블의 크기 , 그리고 사용되는 데이터베이스 시스템이 무엇인지에 대한 정보를 제공합니다. 색인이 무엇인지 또는 색인을 사용하는 방법을 모르면 여기를 참조하십시오 : How does database indexing work?.

주의 : 시스템에 DBA가있는 경우, 특히 라이브 시스템에서 아무것도 인덱싱하기 전에 확인하십시오. 당신이 그들에게 친절하다면 그들은 도울 수 있습니다. 시스템이 다른 많은 시스템에서 사용되는 경우 인덱스와 같은 것을 변경하기 전에주의하십시오. 데이터가 여러 쿼리 유형에 사용되는 경우 충돌하거나 겹치는 수많은 인덱스를 생성하지 않도록하십시오.

구문. 표준 (SQL92)은 CREATE INDEX [index name] ON [table name] ([column name])을 사용합니다. 이 구문은 거의 모든 시스템에서 작동합니다. 테이블에 인덱스가 하나만 필요하고 클러스터 된 인덱스가없는 경우 다음을 사용할 수 있습니다. CREATE [Unique] Clustered INDEX [index name] ON [table name] ([column name]) - 동일한 값을 가진 여러 항목이있을 수없는 경우 고유해야합니다. 이 기능을 사용할 수 없으면이 게시물 (How do I index a database column)을 참조하십시오.

색인을 생성해야하는 테이블은 무엇입니까? 특히 데이터가 정적이거나 새 값만 가져 오는 쿼리에 사용되는 모든 테이블은 훌륭한 후보입니다. 테이블이 쿼리에 있고 조인 문이있는 경우 조인 할 열의 인덱스가 필요할 수 있습니다.

어떤 열을 색인화해야합니까? 최상의 인덱스를 선택하고 데이터베이스를 올바르게 인덱싱하는 방법에 대한 서적이 있습니다. 당신이 문제에 깊은 다이빙을하지 않으려면 색인을위한 엄지 손가락의 기본 규칙은 다음과 같습니다이 순서에 따라 인덱스 :

  1. 가입 조건 (on Table1.columnA=Table2.ColumnA and Table1.columnB=Table2.ColumnQ)
  2. 필터링 된 열 (where Table1.columnN=’Bob’ and Table1.columnS<20)
  3. 주문 가능한 그룹은 저자/등 (순서에 사용되는 모든 열은/그룹핑 인덱스이어야/별)

또한 :.

  • 정수 또는 날짜 인 경우 아무 것도 varchar로 저장하지 않는 데이터 유형을 사용하십시오. 가능한 경우 가능한 한 가장 작은 데이터 유형을 사용하십시오.
  • 조인이 int, int, varchar 및 varchar 등의 동일한 데이터 유형인지 확인하십시오.
  • 가능하면 각 테이블의 각 조인 조건부에 대해 고유 한 null이 아닌 인덱스를 사용하십시오.
  • 가능한 모든 열이 null이 아닌지 확인하십시오. 그들이 널 (null) 값을 포함 할 수없는 경우 (당신은

    Alter table Table1 
        alter column columnN int not null 
    

이 모든 작업을 수행합니다. 다음과 같은 구문을 사용할 수 있습니다, 당신은 당신의 방법에 잘있을 것이다. 을하지만 당신은 정기적으로 물건을 필요로하는 경우, 학습 책을 사서 온라인에서 정보를 찾을 수 있습니다. 거기에는 많은 정보가 있습니다. 주제가 깊지 만 자신이하는 일을 알고 있으면 질문을 많이 할 수 있습니다.

관련 문제