PHP if 比较 vs MySQL Where(哪个更有效率)

PHP if comparison vs MySQL Where (Which is more efficient)

我的情况: 我的网站将查看 cookie 以获取记住我的令牌和用户 ID。如果 cookie 存在,它将取消散列并查找用户 ID 并比较令牌。 "WHERE userid = '' and rememberme = ''".

我的问题是:MySQL 是否会针对唯一用户 ID 优化此查询,以便查询不会为这个超过 20 个字符的标记扫描整个数据库?或者我应该只 select 来自数据库的令牌,然后使用 php if 比较来检查令牌是否相同?

简而言之 (tl;dr): 检查令牌是否与 MySQL select 查询匹配会更好,还是从数据库中获取所有标记并将值与 php if 条件比较?

谢谢!

在MySQL端比较应该很快。它应该首先通过 ID 找到相应的行(快速),然后比较哈希(也很快,因为只有 1 行要检查)。

尝试使用 EXPLAIN 分析查询以找出实际的执行计划。

在我看来,无论使用什么(真实的)数据库服务器,使用 WHERE 子句总是更快。数据库引擎有强大的算法来搜索用编译为平台专用低级代码的语言编写的数据,因此它甚至不能与用解释 PHP 编写的某些循环相比较。 请记住,对于 PHP 循环,您必须将所有记录从 DB 发送到 PHP.

简单回答:

是的,只要您在 WHERE ... 部分中搜索的变量被索引,数据库肯定会支持您的搜索!如果您担心性能,绝对不应该通过 SQL 检索所有信息然后执行 PHP 条件。

因此,如果 table 中的 id 列未编入索引,您应该为其编入索引。如果你说......你的 table 和 运行 中已经有 100 万行像 SELECT * FROM user WHERE id = 994321 这样的命令,你会看到性能明显提高。

详细说明:

数据库(如 MySQL)在执行 queries/commands 时比您在 php 中预期的要快得多。在您的特定情况下,假设您正在执行此 SQL 语句:

$sql = "SELECT * FROM users WHERE id = 4";

如果您有 100 万用户,并且 id 列未编入索引,MySQL 将遍历所有 100 万用户以查找包含 id = 4 的所有行。但是,如果它被编入索引,则 MySQL 会生成一个名为 b tree 的东西( 在幕后 ),其工作方式类似于字典的索引工作方式.

如果你试图在字典中慢慢地寻找世界,你可能会打开中间的书,找到以字母M[开头的单词=39=] 然后再次查看右侧页面的中间,希望找到更接近 S 的字母。这种查找单词的方法比从头一页一页地查看每个页面要快得多。

正是出于这个原因,MySQL 创建了索引来帮助提高性能,绝对应该利用此功能来帮助提高查询速度。

如果您的数据库位于不同于 Apache PHP 的单独服务器上,那么毫无疑问,如果您在 MySQL.

中编写查询会更快

如果您的 PHP 和 MySQL 服务器在同一台物理服务器上,可能 PHP 会更快,因为将在 RAM 上进行比较但是拥有所有用户 ID 数组进入 RAM 会浪费 RAM,因此您可以使用可以加快查询速度的索引

更改TABLEtable添加索引idx__tableName__fieldName(字段)