PHP如果与MySQL比较哪里(效率更高)

时间:2016-05-23 21:54:00

标签: php mysql cookies comparison

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

我的问题是:MySQL会在唯一的用户标识上优化此查询,以便查询不会扫描整个数据库中的20多个字符标记吗?或者我应该从数据库中选择令牌,然后使用 php if比较来检查令牌是否相同?

简而言之(tl; dr):检查令牌是否与MySQL选择查询匹配,或者从数据库数据库中获取所有令牌并将值与一个 php if有条件的?

谢谢!

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

简单回答:

是的,数据库肯定会乐观您的搜索,因为您在WHERE ...部分搜索的变量已编入索引!你绝对不应该通过SQL检索所有信息,如果你担心性能,那么就做一个PHP条件。

因此,如果表中的id列未编入索引,则应对其进行索引。如果您已经说过......表中已有100万行并运行SELECT * FROM user WHERE id = 994321之类的命令,您会看到性能明显提高。

<强>诠:

数据库(如MySQL)在执行查询/命令方面要比在php中发生的要快得多。在您的特定情况下,假设您正在执行此SQL语句:

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

如果您有100万用户,并且id列未编入索引,MySQL将查看所有100万用户以查找id = 4的所有行。但是,如果它被索引,那么MySQL会产生一种叫做b tree的东西(幕后),它与字典索引的工作方式类似。

如果你试图在字典中找到慢慢的世界,你可以在中间打开这本书,找到以字母 M 开头的单词,然后查看右侧页面的中间位置,希望找到一个更接近 S 的字母。这种查找单词的方法比从1开始逐一查看每个单页要快得多。

由于这个原因,MySQL已经创建了索引以帮助提高性能,并且必须利用此功能来帮助提高查询速度。

答案 3 :(得分:0)

如果您将数据库基于与Apache PHP不同的服务器,那么毫无疑问,如果您在MySQL中编写查询,它会更快。

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

ALTER TABLE表ADD INDEX idx__tableName__fieldName(field)