请考虑以下查询:
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/