我必须从包含约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行的文件,每次崩溃。关于如何优化它的任何建议?