PHP从外部数据库中选择非常慢

时间:2014-03-06 21:21:17

标签: php mysql sql

我在PHP中运行一个简单的查询到外部MySQL数据库:

$sql = "SELECT COUNT(id) as n FROM `call_history` where extension_number = '0536*500' and flow = 'in' and DATE(initiated) =\"{$initiated}\"";
$rs=mysql_query($sql,$pbx01_conn);
$rs = mysql_fetch_row($rs);
echo $rs['n'];

似乎需要永远运行,此表中有 4000000 + 行。

我没有对数据库的完全写入权限,只有读取权限。有什么办法可以加快查询速度吗?

1 个答案:

答案 0 :(得分:0)

您无法按照当前结构化的方式在上次过滤条件中使用索引。

通过将DATE(initiated)与输入值进行比较,您不允许在initiated上使用索引(我假设它是时间戳或日期时间字段)并触发全表扫描,因为比较必须计算。

为你的最后一个条件尝试这样的事情:

AND initiated BETWEEN '? 00:00:00' AND '? 23:59:59'

?YYYY-MM-DD格式的变量。

你已经解决了这个问题,你只需确保在extension_number, flow , and of course已启动`上有索引。如果没有这些索引,您将无法完全优化查询。因此,如果您对该表没有写访问权并且缺少这些索引,那么您应该与具有该写访问权的人一起查看是否可以添加索引(注意添加索引会影响表上的插入性能)。