更快的MySQL查询?

时间:2010-07-06 17:10:23

标签: mysql query-optimization

在我的工作中,我有几个包含超过200,000行数据的表。我必须设置一些查询,一次超过15,000+,所以有时我会收到此错误:

  

PHP致命错误:最大执行次数   时间超过180秒

那么,如何加快查询速度呢?

查询是这样的:

SELECT  toemail, toname
FROM    email_sent
WHERE   companyid = '$member[companyid]'

感谢。

4 个答案:

答案 0 :(得分:5)

email_sent (company_id)上创建索引:

CREATE INDEX ix_emailsent_companyid ON email_sent (company_id)

答案 1 :(得分:1)

优化可能就是答案。如果还不够,你可以随时增加PHP的时间限制。

这将仅为该脚本设置它:

set_time_limit docs

  

设置脚本的秒数   允许跑。如果达到,   该脚本返回致命错误。该   默认限制为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上有索引,如果没有,是否创建了一个改进性能?