2017-02-09 10 views
0

4 테이블 간의 조인 결과를 지정하고 싶습니다. - 쿼리 순서 (b.SITE_ID)에 대한 인덱스를 작성하면 쿼리 성능이 향상됩니까?조인 결과를 정렬 할 때 인덱스가 성능을 향상시키지 않습니다

SELECT b.SERVICE_ID, b.ATT_ID, b.SITE_ID, b.ATT_VALUE, c.KEY_NAME, d.NAME as account_name 
FROM SITE_ATTRIBUTES a , SF_SITE_ATTRIBUTES b, ATTRIBUTE_DEF c,SF_SITE_MASTER d 
WHERE a.SERVICE_ID=b.SERVICE_ID 
    and b.SERVICE_ID=c.SERVICE_ID 
    and b.SERVICE_ID=d.SERVICE_ID 
    and [email protected]_id COLLATE utf8_unicode_ci 
    and b.ATT_ID= c.ID 
    and b.ATT_ID= a.ATT_DEF 
    and a.SITE=b.SITE_id 
    and b.SITE_ID = d.ID 
    and a.value != b.att_value 
    and b.att_value is not null 
ORDER BY b.SITE_ID 

생각 그것은하지 않습니다 순서는 즉시 데이터 정렬을 변경해야하기 때문에

+0

생각합니다. 하지만 당신은 Explain 분석을 시도하고 점검해야합니다. 성능 질문에는'EXPLAIN ANALYZE'와 테이블 크기, 인덱스, 현재 시간 성능, 원하는 시간 등에 대한 정보가 포함되어야합니다.'느림 '이란 상대적인 용어이며 비교할 실제 가치가 필요합니다. \t \t [** MySQL **] (http://dba.stackexchange.com/questions/15371/how-do-i-get-the-execution-plan-for-a-view) –

+0

이 부분을 읽으십시오. DBA 스택 교환 질문 : http://dba.stackexchange.com/questions/11031/order-by-column-should-have-index-or-not ... 아마도 대답은 아마 예 –

+0

그리고 정말로 읽어야합니다. 이. Explosion JOIN의 사용을 홍보하십시오, Aaron Bertrand는 멋진 기사를 작성했습니다 : [오래된 스타일의 JOIN을 사용하는 나쁜 습관] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad 그것에 대해 - 살기 -에 - 사용 - 오래된 - 스타일 조인 .aspx). –

답변

0

[email protected]_id COLLATE utf8_unicode_ci 비효율적인가 ... 결과 집합을 조인 중간에 걸쳐 발생하기 때문이다. 변경하면 SERVICE_IDCOLLATE tf8_unicode_ci으로 표시됩니다. 연결에서 해당 데이터 정렬을 사용하고 있습니다. 그리고 ...

INDEX(SERVICE_ID, SITE_ID) 

아마도 가장 좋은 것입니다 -

  1. SERVICE_ID에 필터;
  2. SITE_ID으로 정렬하지 마십시오.

나머지 필터링 (!=NOT NULL)은 색인 생성을 통해 불가피합니다.

단지 INDEX(SITE_ID) 검색어로는 좋지 않습니다.