- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的情况:我的网站将在 Cookie 中查找“记住我” token 和用户 ID。如果 cookie 存在,它将对其进行反哈希处理并查找用户 ID 并比较 token 。带有“WHERE userid = '' and Rememberme = ''”。
我的问题是:MySQL 是否会针对唯一用户 ID 优化此查询,以便查询不会扫描整个数据库来查找此 20 多个字符的标记?或者我应该从数据库中选择 token ,然后使用 php if
比较来检查 token 是否相同?
简而言之(tl;dr):最好检查 token 是否与 MySQL 选择查询匹配,或者从数据库中获取所有 token 并将值与php if
条件?
谢谢!
最佳答案
简单答案:
是的,只要您在 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 树
的东西,它的工作原理与字典索引的工作原理类似。
如果您尝试在字典中慢慢找到世界,您可能会从中间打开书本,找到以字母M开头的单词,然后查找再次在右侧页面的中间,希望找到更接近S的字母。这种查找单词的方法比从头一页一页地查看要快得多。
正是出于这个原因,MySQL 创建了索引来提高性能,并且绝对应该利用此功能来帮助提高查询速度。
关于PHP if 与 MySQLWhere 比较(哪个更高效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37401177/
我有一个这样的表: +-------------+-------------------+----------------+ |id | column1 | c
从全局 WHERE (type=3) AND WHERE (id BETWEEN 3 和 7) 中选择名称、地址;语法问题。但想法是只从类型 3 列中获取 3 到 7 之间的行。 我删除了 () 之一
首先,我意识到还有其他类似的问题,我已经阅读了其中很多问题,但我无法弄清楚。 我有三个这样的表。 urilist ---------------- rowid | uri 1000 xyz
这个问题已经有答案了: how to trim leading zeros from alphanumeric text in mysql function (8 个回答) 已关闭 5 年前。 MyS
我试图根据与插入对象的匹配从数据库中选择行,但在 WHERE 子句中,我需要条件仅适用于该列值不为空的情况。因此,基本上仅当比较表中的列不为空时,才将列与插入行中的列进行比较。我希望我解释得足够清楚,
我的情况:我的网站将在 Cookie 中查找“记住我” token 和用户 ID。如果 cookie 存在,它将对其进行反哈希处理并查找用户 ID 并比较 token 。带有“WHERE userid
我是一名优秀的程序员,十分优秀!