2011-11-19 4 views
2

긴 시간 리더기, 처음 포스터. 나는 고객이 많은 카테고리를 가지고있을 때 영원히 움직이는 쿼리 (아래)를 가지고있다. 어떻게 든 속도를 올리면 어떻게되는지 알 수 없습니다. 어떤 도움이라도 대단히 감사합니다.느린 SQL 쿼리 속도

SELECT pictures1.*, GROUP_CONCAT(cats_master.categoryName SEPARATOR ';') AS categoryNames 
      FROM pictures1 
       LEFT JOIN cats_contacts ON pictures1.id =cats_contacts.contact_id 
       LEFT JOIN cats_master ON cats_contacts.category_id = cats_master.id 
      WHERE pictures1.customer_id = (customer id goes here) 
      GROUP BY pictures1.id 
      ORDER BY pictures1.l_name ASC 

이 쿼리의 결과는 고객이 다운로드 할 수있는 파일입니다 - 문제는 범주 조각 될 것으로 보인다.

+1

'카드 데이터'란 무엇입니까? –

+0

죄송합니다. 기호가 수정되었습니다. – user1055739

답변

1

갖는 다음 인덱스를 크게 쿼리 속도를 높이는 것입니다. 그 후에 그것은 껄끄 러운 시간입니다. 예를 들어 모든 '조인'ID는 동일한 유형 및 크기입니다.

추신 : 쿼리 계획은 무엇을 말하고 있습니까?

이상으로 색인을 다시 작성하면 차이가 있는지 확인하십시오.

+0

감사합니다 Raihan - 그림 테이블을 위해 - 당신은 그 3 개의 분야 또는 3 개의 색인을 가진 1 개의 색인을 건의하고 있습니까? 이 부분은 나를 혼란스럽게합니다. cats_contacts : 이름 : CATEGORY_ID 필드 : 지금 나는 다음과 같은 인덱스가 CATEGORY_ID, contact_id <-이 보이는 하나의 인덱스로 설정, 고유 인덱스 유형을 cats_master : CUSTOMER_ID에 하나 categoryName이 하나 (방금 만든 이 categoryName 인덱스) - 두 인덱스 유형 일반 – user1055739

+0

(나는이 주석의 모양을 고치기 위해 약 100 번 시도했으나 도움말 문서를 읽었을지라도 여전히 추악합니다.) 미안합니다. – user1055739

+0

모든 색인은 단일 열에 있어야합니다 검색어에 따라 복합 색인이 필요하지 않습니다. 그래서'pictures' 테이블에 3 개의 인덱스가 있고,'cats_contacts'에는 1,'cats_master'에는 2가 있습니다. 컬럼 중 하나가 기본 키인 경우, 고유 인덱스로 만드십시오. – Raihan

3

설명 플랜을 점검하고 필요한 경우 색인을 추가하십시오. 최종 종류에 대한

id, l_name, customer_id: pictures table 
contact_id: cats_contacts table 
id, category_id: cats_master table 
0

내가 모든 ID를 인덱스를 시도 할 것, + l_name :

+0

Tony에게 감사드립니다. 문제는 확실하지 않지만 설명은 "파일롯을 사용하여 임시 사용"이라고 말합니다. – user1055739

+0

질문에 추가 할 수 있습니까? 우리는 당신에게 더 많은 단서를 줄 수있을 것입니다. SQL 성능 튜닝은 과학만큼이나 예술이다. –