MySQL EXISTS()真的很慢

时间:2013-02-22 10:26:44

标签: mysql exists

此查询

SELECT
    itemID,
    locationParentID,
    locationID,
    categoryParentID,
    categoryID,
    itemTitle,
    itemDetails,
    itemAttributes,
    itemPictures,
    itemFeatured,
    itemSpotlight,
    itemAdded
FROM items
WHERE items.siteID IN('".$cfg['site']['siteShares']."') 
    AND EXISTS(SELECT 1 FROM sites_locations sl WHERE items.locationID  = sl.locationID AND siteID = '".$cfg['site']['siteID']."' LIMIT 1)
    AND EXISTS(SELECT 1 FROM sites_categories sc WHERE items.categoryID = sc.categoryID AND siteID = '".$cfg['site']['siteID']."' LIMIT 1)
    AND itemStatus = '1'
    AND itemAdded > '".$cfg['timestamp']."'

有效但最多需要6秒

我可以使用JOIN因为我猜它会更快

这是我使用JOIN尝试的内容,但它返回所有结果,而不仅仅是sites_location表中具有位置的项目。

SELECT 
    itemID, 
    locationParentID, 
    categoryParentID, 
    categoryID, 
    itemTitle, 
    itemDetails, 
    itemAttributes, 
    itemPictures, 
    itemFeatured, 
    itemSpotlight, 
    itemAdded 
FROM items LEFT JOIN sites_locations 
    ON items.locationID = sites_locations.locationID 
    AND sites_locations.siteID = items.siteID 
WHERE items.siteID IN('1,2')  AND itemStatus = '1'
    AND itemAdded > '1356048000' ORDER BY itemID DESC LIMIT 15

2 个答案:

答案 0 :(得分:0)

不确定您是否在第二次查询中对 sites_categories 表进行了加入。

答案 1 :(得分:0)

INNER JOIN关键字在两个表中至少有一个匹配时返回行。

LEFT JOIN关键字返回左表(table_name1)中的所有行,即使右表(table_name2)中没有匹配项也是如此。

这就是你无法获得价值的原因

Check this link