有没有更快的方法来删除孤立的表条目

时间:2013-11-11 14:35:51

标签: php mysql sql

我目前在列表中有20,000行,并且此查询运行速度非常慢。

它的作用是删除自列表endDate以来列表当前时间为60秒或更长的所有列表行以及列表与任何任务无关的位置。

DELETE
    listing
FROM
    listing
LEFT JOIN
    task
ON
    task.listingId = listing.listingId
WHERE
        task.listingId      IS NULL
    AND listing.endDate     < DATE_SUB(NOW(), INTERVAL 1 MINUTE)

有没有更快的方法来删除孤立的列表行?

更新

原始(上方)查询需要11.6秒。

这一堆相同的查询需要0.09秒,但它更麻烦并且需要一堆PHP:

$q = "
    SELECT
        listingId
    FROM
        task
";
$result = mysql_query($q) or die(mysql_error());

$taskListingIds = array();

while ($task = mysql_fetch_array($result)) {
    $taskListingIds[$task['listingId']] = NULL;
}

$q = "
    SELECT
        listingId
    FROM
        listing
    WHERE
        endDate < DATE_SUB(NOW(), INTERVAL 1 MINUTE)
";
$result = mysql_query($q) or die(mysql_error());

while ($listing = mysql_fetch_array($result)) {
    if (!array_key_exists($listing['listingId'], $taskListingIds)) {
        $q = "
            DELETE
            FROM
                listings
            WHERE
                listingId = " . $listing['listingId'] . "
        ";
        mysql_query($q) or die(mysql_error());
    }
}

我现在仍然坚持这一点,但是对于使用SQL来快速完成此操作的任何建议都会很棒。

0 个答案:

没有答案