0

如何找出用户已经注册,例如在 Web 应用程序中?就像我有一个包含 100 万用户的数据库。每次比较数据库中的每一行都是低效的。还有其他最佳方法吗?

4

2 回答 2

8

每次比较数据库中的每一行都是低效的

我收集到您正在通过 a 将整个 DB 表内容拖入 Java 的内存中SELECT * FROM User,然后循环遍历循环中的每一行并通过如下方式while比较其用户名,这是真的吗?equals()

public boolean exists(String username) throws SQLException {
    // ... Declare, etc.

    statement = connection.prepareStatement("SELECT * FROM User");
    resultSet = statement.executeQuery();
    while (resultSet.next()) {
        if (username.equals(resultSet.getString("username"))) {
            return true;
        }
    }
    return false;

    // ... Close, etc (in finally!)
}

那么这确实是非常低效的。您应该索引用户名列(它可能已经是,有UNIQUE约束),然后使用 SQLWHERE子句。它将准确返回零或一行,数据库将尽最大努力找到它,这通常比上述 Java 方法快得多。

public boolean exists(String username) throws SQLException {
    // ... Declare, etc.

    statement = connection.prepareStatement("SELECT id FROM User WHERE username = ?");
    statement.setString(1, username);
    resultSet = statement.executeQuery();
    return resultSet.next();

    // ... Close, etc (in finally!)
}

简而言之,只要您正确使用数据库索引并编写 SQL 查询,使其准确返回您需要的信息,而无需使用 Java 进行过滤或之后的其他查询,那么这将是最有效的方法。

于 2013-08-26T11:22:47.417 回答
1

您可以优化您的query。您可以为用户维护一个唯一的用户名(或您的唯一参数),当有人尝试注册时,您可以将其传递usename给查询并检查它是否已经注册

于 2013-08-26T11:16:05.350 回答