优化庞大数据库的循环

时间:2019-08-01 14:37:06

标签: php mysql

我必须从包含约1000万用户的数据库的csv文件中找到约1500个用户的匹配项。我现在的操作方式是遍历文件并在每一行上执行查询。但是对于这样的用户数量,它已经超过了时间限制并崩溃了。我不允许以任何方式更改数据库表,只能更改我的代码。

我当时想从整个表中构建一个二叉树,然后在树上而不是在表上进行搜索。

基本上,我的代码如下:

//connect to db
//using locator

//loop through csv file and build an array

for ($i = 1; $i < $arraycount; $i++) {
    $email = $csvAsArray[$i][3] ?: "";
    $email2 = $csvAsArray[$i][4] ?: "";
    $myquery = "SELECT id, firstname, lastname FROM user WHERE user_email = :email OR user_email2 = :email2";
    $params = array(':email' => $email,':email2' => $email2);
    $stmt = $db->prepare($myquery);
    $stmt->execute($params);

    if (!$result = $stmt->fetchAll()) {
       //no match
    }
    else{
      // match
    }
}

对于较小的文件(CSV中的100行以下),此方法工作正常,但主要用于超过1000行的文件,每次崩溃。关于如何优化它的任何建议?

0 个答案:

没有答案