簡體   English   中英

通過多個聯接加快SQL查詢

[英]Speed up SQL query with multiple joins

我有一個查詢,大約需要4分鍾才能運行。 有什么方法可以優化此查詢? 我正在使用MySQL 5.6.20。 我嘗試將每個內部聯接的AND子句添加為最后一個WHERE子句的子查詢,但是它沒有任何效果。

 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

我已經使用了explain select來查找索引,但是目前還不確定要修改什么:

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

首先也是要確保在查詢中使用的表上具有正確的索引。

其次,按照順序從小表到大表的連接順序,使結果數據變窄。

我注意到的另一件事是,這里給出的查詢不能作為group by正常運行,因為只有一列,其中select子句具有各種列,而且我沒有看到group by的使用,因為這里沒有聚合。 如果要進行聚合,請添加所有非聚合列進行分組,並使用至少一個聚合函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM