请考虑以下查询:

SELECT A.*,
    GROUP_CONCAT(DISTINCT CONCAT(I.Image, '@', I.Local, '@', I.Primary) SEPARATOR ',') AS _Images,
    GROUP_CONCAT(DISTINCT H.LocationId SEPARATOR ',') AS _Hierarchy,
    GROUP_CONCAT(DISTINCT Am.AmenityId SEPARATOR ',') AS _Amenities
FROM Ads as A
    LEFT JOIN ImagesTable as I ON I.AdId = A.AdId
    LEFT JOIN HierarchyTable as H ON H.AdId = A.AdId
    LEFT JOIN AmenitiesTable as Am ON Am.AdId = A.AdId
WHERE A.AdId IN (1,2,3,4,5,6,7,8,9,10)
GROUP BY A.AdId

假设表Ads有大约1000.000行。使用mysql运行此查询时,mysql将如何处理此查询?
它是处理表Ads中~1.000.000行的连接操作,还是只处理查询末尾where子句中提供的特定id?
where子句中指定了200行,这样的查询对我来说大约需要0.9秒,我正试图加快它的速度。这就是我感兴趣的原因,如果我能以任何方式固定这个查询,比如告诉mysql只处理所需的行,而不是整个表。

最佳答案

当字段a.adid被索引时,数据库引擎将只搜索索引存储中的所有a.adid,以获取完整表中的位置行。=>快速
当字段a.adid未被索引时,数据库引擎将解析完整表中的所有行以搜索所有a.adid。=>非常慢
当数据库引擎获得a.adid时,它将使用它们在另一个表上联接。

关于mysql - SQL Join - 需要解释,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41722695/

10-09 22:09