首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >改进在where子句中使用NOW()函数的性能

改进在where子句中使用NOW()函数的性能
EN

Stack Overflow用户
提问于 2021-07-08 01:50:26
回答 1查看 84关注 0票数 0

我正在从PHP中运行一个MySQL查询(用于防止暴力):

代码语言:javascript
复制
 $stmt = $sql_connection->prepare(
        'SELECT 1 FROM `ip_login` WHERE `ip` = ? AND `when` > ADDDATE(NOW(), INTERVAL -5 SECOND)');

我想知道是否有一种方法可以防止数据库服务器计算每条记录的ADDDATE(NOW(), INTERVAL -5 SECOND),如下所示:

代码语言:javascript
复制
$stmt = $sql_connection->prepare(
        'SELECT 1 FROM `ip_login` JOIN
            (SELECT ADDDATE(NOW(), INTERVAL -5 SECOND) as 'when') as 'time'
        ON `ip_login`.`when` > `time`.`when`
        WHERE `ip_login`.`ip` = ?');

我不计算PHP代码中的时间的原因是,如果有多个HTTP服务器处理同一个数据库,我就不需要保持它们的时间同步。

complicated?

  • Is的查询是否值得
  1. 更好地完成?
EN

回答 1

Stack Overflow用户

发布于 2021-07-08 07:06:43

除非我们对数据库的结构有更多的了解,否则我们无法确定。

很可能在‘ip_login.time’上没有索引,当您可以有2个WHERE子句时,为什么要做一个自联接呢?

你可以用极限限制以后的结果。

而且,正如user3783243所提到的,您可以使用EXPLAIN来查看查询速度缓慢的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68294664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档