簡體   English   中英

MySQL性能差INSERT或PHP PDO

[英]MySQL Poor performance INSERT or PHP PDO

通常,當用戶訪問我的網站時,他會平均一次平均“訂閱”約50個事件,我們將其保存在一個可將許多用戶鏈接到許多事件的mapping_table中。 maping_table大約有5萬個條目,每天增長數百個。

INSERT映射表中的〜50行大約需要10到20秒,這使我的網站顯得很慢。

我似乎無法解決如何改善以下PHP或SQL以減少INSERT時間的問題,因為這似乎很基本。

這是SHOW CREATE語句:

    CREATE TABLE `mapping_table` (
     `user_id` char(21) NOT NULL,
     `event_id` char(21) NOT NULL,
     `update_id` char(10) NOT NULL,
     PRIMARY KEY (`user_id`,`event_id`),
     KEY `event` (`event_id`),
     CONSTRAINT `mapping_table_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users_table` (`user_id`) ON DELETE CASCADE ON UPDATE NO ACTION,
     CONSTRAINT `mapping_table_ibfk_2` FOREIGN KEY (`event_id`) REFERENCES `events_table` (`event_id`) ON DELETE CASCADE ON UPDATE NO ACTION
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1

我的PHP腳本的插入部分:

    $update_id = 'RandomString';
    $conn = new PDO($pdo_serv, $db_user, $db_pwd);
    $stmt = $conn->prepare("INSERT INTO `mapping_table` (`user_id`, `event_id`, `update_id`)
                    VALUES (:uid,:eid,:upd)");

    //GO THROUGH EACH USER SUBSCRIBED EVENTS AND INSERT THEM
    foreach($subscribed_events AS $event) {
        $stmt->bindParam(':uid', $userid);
        $stmt->bindParam(':eid', $event->id);
        $stmt->bindParam(':upd', $update_id);
        $stmt->execute();
    }

我願意接受任何建議。

附加信息 :

如果我microtime每個插入我的300ms的平均得到每個刀片1秒。

我嘗試刪除UNIQUE KEY ,然后刪除所有FOREIGN KEYS ,然后刪除所有INDEXES但是這些在性能上沒有任何區別。

在對我的問題發表評論之后,我對php進行了如下修改,以進行batch INSERT

$update_id = 'RandomString';
$conn = new PDO($pdo_serv, $db_user, $db_pwd);

$sql = "INSERT INTO `mapping_table` (`user_id`, `event_id`, `update_id`)
                VALUES ";
$values = "";

//GO THROUGH EACH USER SUBSCRIBED EVENTS GENERATE VALUES STRING
foreach($subscribed_events AS $event) {
    $values .= "('".$userid."','".$event->id."','".$update_id."'),"
}

//Proceed batch insert
$values = rtrim($values, ",");
$sql .= $values;
$stmt = $conn->prepare($sql);
$stmt->execute();

這將我的平均插入時間減少到每行插入少於10毫秒(之前的每行300毫秒減少到1秒)。 沒想到差異會那么大。 謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM