在我的工作中,我有几个包含超过200,000行数据的表。我必须设置一些查询,一次超过15,000+,所以有时我会收到此错误:
PHP致命错误:最大执行次数 时间超过180秒
那么,如何加快查询速度呢?
查询是这样的:
SELECT toemail, toname
FROM email_sent
WHERE companyid = '$member[companyid]'
感谢。
答案 0 :(得分:5)
在email_sent (company_id)
上创建索引:
CREATE INDEX ix_emailsent_companyid ON email_sent (company_id)
答案 1 :(得分:1)
优化可能就是答案。如果还不够,你可以随时增加PHP的时间限制。
这将仅为该脚本设置它:
设置脚本的秒数 允许跑。如果达到, 该脚本返回致命错误。该 默认限制为30秒,如果是 存在,max_execution_time值 在php.ini中定义。
或者,编辑php.ini并更改max_execution_time设置。当然,这将在全球范围内改变它。听起来它已被调整(由您的系统管理员?),默认为30秒。
答案 2 :(得分:0)
如果您还没有添加索引。 另一种方法是从MyISAM切换到InnoDB。
答案 3 :(得分:0)
您可能想要研究的第一件事是索引参与查询的任何列。例如,如果您的查询始终测试列FirstName
的值,则可能需要对其进行索引。
如果您提供DDL(数据定义Lanaguage)脚本或表的描述,以及花费这么长时间的查询,我们可能能够提供更好的索引提示。
如果您已尽可能多地调整并且仍然有超时,则可能需要查看是否可以增加事务超时限制。我不太了解您的服务器设置以提供详细信息,但这类事情通常可能。
<强>更新强>
如果您的查询是:
SELECT toemail,toname FROM email_sent WHERE companyid = '$member[companyid]'
我的第一个问题是:您是否在companyid
上有索引,如果没有,是否创建了一个改进性能?