mysql最大执行时间_PHP的MySQL的最大执行时间超过300秒_fatal错误

我正在从数据库中查询数据,并且查询子句随日期而变化。

换句话说,我想通过以unix时间戳记秒数来获取一日数据。

因此,我为一日查询所做的是

SELECT IDnum, Timestamp FROM table_name

WHERE CONVERT(Timestamp, UNSIGNED INTEGER) >= ($start_tim-86400*($i+1))

AND CONVERT(Timestamp, UNSIGNED INTEGER) < ($start_time-86400*$i)

因为表中的时间戳属性是varchar(32),所以我在where子句中使用了CONVERT()将其转换为int,并与86400的int类型进行比较。

到目前为止,该查询子句仍然有效,但是我设置了ini_set('max_execution_time',300)至少需要5分钟。 5分钟后,它显示

"致命错误:在第90行的C: www LineChartOne generateJSONdata.php中超过了420秒的最大执行时间",但仍未完成。

我的问题是为什么它需要这么多时间,并且因为我在" where子句"中使用了函数调用? 或" where子句"出现问题,否则它不应运行得太慢。

考虑让MySQL解释发生了什么:DESCRIBE SELECT IDnum,FROM table_name的时间戳WHERE CONVERT(Timestamp,UNSIGNED INTEGER)> =($ start_tim-86400 *($ i + 1))AND CONVERT(Timestamp,UNSIGNED INTEGER)

我猜想CONVERT()是超级无效的。使用UNIX_TIMESTAMP()或FROM_UNIXTIME()或DATE_SUB()或DATE_DIFF()之类的日期函数比较日期。

如果仍然需要永远,那么可能是出现了问题,并且您没有数千万行,那么很可能是:

您的PHP代码效率低下。

这个查询比您显示的内容还多。

您的Web服务器或mySQL服务器承受着其他用户的沉重负担。

编辑:

亲爱的耶稣,您注释中的代码使我发痒。我也刚刚意识到您的Timestamp列是VARCHAR,而不是TIMESTAMP。坏用户。不要将数字或日期存储为字符串。去坐在角落里。

选项1:将其设为INT。 [使用您现有的代码]

选项2:设为DATETIME。 [通常更灵活]

您没有得到的东西:

FROM_UNIXTIME()将整数时间戳转换为DATETIME类型。如果您输入一个字符串,它将进行隐式转换。 [转换很慢]

UNIX_TIMESTAMP()接受日期字符串,DATE或DATETIME并返回整数。

您提供的代码UNIX_TIMESTAMP(FROM_UNIXTIME(Timestamp))将字符串转换为整数,然后将日期转换为整数。文档在这里,请继续阅读。

您的查询花费这么长时间的绝大多数原因是因为mySQL必须将Timestamp中的所有值从VARCHAR转换为INTEGER。更改列类型,您可以进行简单的整数比较,这将更快。

通过预先计算PHP中的表达式$start_time-86400*($i+1),可以大大降低性能。 mySQL应该只进行一次评估,但是当查询变得更加复杂时,优化器可以做一些时髦的事情,并且它可能会开始为每一行进行计算。

谢谢你的帮助。 我更改为:" SELECT IDnum,时间戳记,A,B,从krisdata,其中UNIX_TIMESTAMP(FROM_UNIXTIME(Timestamp))> =((($ start- $ incompleteDay)-86400 * $ i)和UNIX_TIMESTAMP(FROM_UNIXTIME(Timestamp))<= $ start AND A> 0.0 AND B> 0.0"; 它仍然需要永远。 根据您的3个假设:

基于您的3个假设:1.我的php代码死于致命错误:第107行的C: www LineChartOne generateJSONdata.php中超过300秒的最大执行时间。第107行的$ results = mysql_query($ sqlQuery)因此 它仍然是查询子句需要花费很多时间吗? 2.我所有的查询条件都张贴在这里,仅用A B回答这两个短名称,关于A B的答案必须大于0我不知道下一步该怎么做,非常感谢!

ini_set('max_execution_time', 300); //300 seconds = 5 minutes

将其放在您的PHP脚本的顶部,然后放开您的脚本!

从使用ini_set()增加PHP脚本执行时间限制中获取

mysql查询解析器正在努力转换这些列,您需要为要存储的值使用正确的数据类型,即:int表示int,varchar表示字符串,datetime等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值