PHP PDO选择速度问题
我想将数组作为参数传递给我的PHP函数。 此阵列最多可由100K行或更多行组成。 该函数的作用是从表中选择这些记录是否存在 该函数运行良好,但现在我只能用一条作为参数传递的记录来测试它 我关心的是处理速度,因为许多用户可以同时运行此进程。我也 担心整个网站,因为我可能效率低下的功能 代码如下:PHP PDO选择速度问题,php,mysql,pdo,Php,Mysql,Pdo,我想将数组作为参数传递给我的PHP函数。 此阵列最多可由100K行或更多行组成。 该函数的作用是从表中选择这些记录是否存在 该函数运行良好,但现在我只能用一条作为参数传递的记录来测试它 我关心的是处理速度,因为许多用户可以同时运行此进程。我也 担心整个网站,因为我可能效率低下的功能 代码如下: $result = _is_already_registered_user($email_addr); //$email_addr is array, can consist 100K records o
$result = _is_already_registered_user($email_addr);
//$email_addr is array, can consist 100K records or more
function _is_already_registered_user($email) {
$servername = "myserver";
$username = "myuser";
$password = "mypassword";
try {
$conn = new PDO("mysql:host=$servername;dbname=mytable", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
return "error connect to database";
}
$email_explode = explode('\n', $email);
$result = array();
for ($i=0; $i<=count($email_explode)-1; $i++) {
$sql = "SELECT COUNT(*) from user WHERE email = '$email_explode[$i]' LIMIT 1";
$stmt = $conn->prepare($sql);
$stmt->bindParam(1, $email, PDO::PARAM_INT);
$stmt->execute();
$result[$i][0] = $email_explode[$i];
if($stmt->fetchColumn()) { // found
$result[$i][1] = '1';
} else {
$result[$i][1] = '0';
}
}
return $result;
}
这够好吗?有什么办法可以改进吗
谢谢大家 确保快速数据库性能的正确方法是在“电子邮件”列中定义一个索引。这将确保数据库不必执行完整的表扫描,而是可以通过索引查找直接获取给定的电子邮件地址。电子邮件列是主键,这就足够了吗?谢谢是的,主键会自动为其定义唯一索引。假设电子邮件是PK,你就没事了。10万个个人查询?我认为这将需要相当长的时间来运行。即使每个查询需要0.1毫秒,也需要10秒。你能说说为什么你需要检查10万个电子邮件地址吗?