PHP PDO选择速度问题

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

我想将数组作为参数传递给我的PHP函数。 此阵列最多可由100K行或更多行组成。 该函数的作用是从表中选择这些记录是否存在

该函数运行良好,但现在我只能用一条作为参数传递的记录来测试它

我关心的是处理速度,因为许多用户可以同时运行此进程。我也 担心整个网站,因为我可能效率低下的功能

代码如下:

$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万个电子邮件地址吗?