2014-11-17 7 views
0

약 4 분이 걸리는 쿼리가 있습니다. 이 쿼리를 최적화 할 수있는 방법이 있습니까? MySQL 5.6.20을 사용하고 있습니다. 나는 각 내부 조인의 AND 절을 마지막 WHERE 절의 하위 쿼리로 추가하려고 시도했지만 효과가 없습니다.여러 조인을 사용하여 SQL 쿼리 속도 향상

SELECT h.userId 
    , h.pageId 
    , h.id 
    , h.content highlightContent 
    , h.createdAt highlightCreatedAt 
    , h.tagName 
    , h.inputId 
    , h.children 
    , p.topic_title pageTitle 
    , p.topic_uuid guid 
    , p.topic_position pagePosition 
    , p.lcms_module_uuid pageModuleId 
    , mp.module_position modulePosition 
    , mp.lcms_module_uuid moduleID 
    , mp.section_uuid moduleSectionUUID 
    , mp.module_title moduleTitle 
    , sp.section_uuid sectionGuid 
    , sp.section_position sectionParentId 
    , sp.album_uuid sectionAlbumID 
    , sp.section_title albumTitle 
    , ap.album_title albumPath 
    , ap.album_uuid 
    , ap.id albumId 
    , ps.id publishId 
    FROM highlights h 
    JOIN LCMS3.topic_publishes p 
    ON p.topic_uuid = h.pageId 
    AND p.publish_schema_id = 5784 
    JOIN LCMS3.lcms_module_publishes mp 
    ON p.lcms_module_uuid = mp.lcms_module_uuid 
    AND mp.publish_schema_id = 5784 
    JOIN LCMS3.section_publishes sp 
    ON sp.section_uuid = mp.section_uuid 
    AND sp.publish_schema_id = 5784 
    JOIN LCMS3.album_publishes ap 
    ON ap.album_uuid = sp.album_uuid 
    AND ap.publish_schema_id = 5784 
    JOIN LCMS3.publish_schemas ps 
    ON ps.topic_publish_uuid = p.topic_publish_uuid 
WHERE h.userId = '364663286b6de43c21d7dafe29370441' 
    AND p.album_uuid = '49152e6b-ca80-4889-a65e-4e6fd1dcc367' 
GROUP 
    BY h.id 
ORDER 
    BY albumId 
    , sectionParentId 
    , modulePosition 
    , pagePosition 

나는 인덱스를 찾아 선택 설명 사용했습니다,하지만 난이 시점에서 수정 모르겠어요 :

http://i61.tinypic.com/33tksw2.png

+2

'explain select ... '를 사용하여 인덱스를 사용하는 위치와 그렇지 않은 위치를 확인하고 적절한 인덱스를 추가하십시오. –

+0

'AND pages.publish_schema_id ='5784 '및 다른 이상한'AND' 절의 요점은 무엇입니까? – Jonast92

+0

LCMS3이 다른 데이터베이스입니까? – Strawberry

답변

0

가장 먼저 일을하게되었는지 당신은 적절한 인덱스가 쿼리에 사용되는 테이블

두 번째로 작은 테이블에서 큰 테이블로의 조인 순서에 따라 결과 데이터가 축소됩니다.

다른 점은 여기에 주어진 쿼리가 그룹으로 올바르게 실행되지 않는다는 것입니다. select 절에 다양한 열이있는 경우 더 많은 집계가 없으므로 여기에서 그룹 사용을 보지 못했습니다. 집계를 원할 경우 그룹화하지 않을 모든 집계 열을 추가하고 적어도 하나의 집계 함수를 사용하십시오.