Mysql 使用多个联接加速SQL查询

Mysql 使用多个联接加速SQL查询,mysql,Mysql,我有一个查询,运行大约需要4分钟。有什么方法可以优化此查询吗?我使用的是MySQL 5.6.20。我尝试将每个内部联接的AND子句添加到最后一个WHERE子句的子查询中,但没有效果 SELECT h.userId , h.pageId , h.id , h.content highlightContent , h.createdAt highlightCreatedAt , h.tagName , h.inputId

我有一个查询,运行大约需要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查找索引,但我不确定此时要修改什么:


首先也是最重要的是确保在查询中使用的表上有适当的索引

其次,按照从小表到大表的顺序进行连接,从而缩小结果数据


我注意到的另一件事是,这里给出的查询不会正常运行,因为GROUPBY只有一列,而select子句有多个列,而且我没有看到GROUPBY的使用,因为这里没有聚合。如果您想进行聚合,将所有非聚合列添加到group by,并至少使用一个聚合函数。

使用
explain select…
查看它在何处使用索引,在何处不使用索引,并添加适当的索引。
和pages.publish\u schema\u id='5784'
以及其他奇怪的
子句有什么意义?LCMS3是另一个数据库吗,您没有聚合函数,因此不确定使用GROUPBY子句要实现什么!?!我认为不需要在这里设置
按突出显示分组.id