高效的 MySQLi 查询

Efficient MySQLi query

我只是想了解一下查询大型 SQL 数据库的最有效方法 我的SQLi 个查询。

对于用户注册表单,如果输入表单的用户名已经存在,我希望检查 SQL 数据库中的用户 table(出于安全原因不一定称为用户)。对于大用户 tables,如果不使用高效查询,这可能会拖慢网站速度。

请注意,table 中的每个用户都有一个唯一的 id

在下面的 MySQLi 查询中使用 LIMIT 1,我可以在找到 1 个匹配后停止查询。

$username = $_POST['username'];
$database = mysqli_connect($dbServer, $dbUser, $dbPassword, $dbName);
$query = "SELECT `username` FROM `".$table."` WHERE `username` ='".mysqli_real_escape_string($database, $username)."' LIMIT 1";

if (mysqli_query($database, $query)) {
    die ("User exists");
}

我相信下面的方法效率更高

$username = $_POST['username'];
$database = mysqli_connect($dbServer, $dbUser, $dbPassword, $dbName);
$query = "SELECT `username` FROM `".$table."` WHERE `username` ='".mysqli_real_escape_string($database, $username)."'";

$result = mysqli_query($database, $query);

if (mysqli_num_rows($result) > 0) {
    die ("User exists");
}

但是,我原以为仍在调用查询以创建 $result,并且没有设置 LIMIT 会减慢速度。我对么?哪个效率更高?

我没有尝试对这两者进行计时 - 一般来说,mySQL 中的效率是关于适当的索引和避免将查询放在可以避免的循环中,因为大部分时间都花在了解释你的询问。在简单的语句中,将您想要执行的操作放在 select 语句中,让 mySQL 优化处理细节几乎总是一个好主意。我会使用 LIMIT 1 让它根据您最多需要一个答案的信息进行操作。