我在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 + 行。
我没有对数据库的完全写入权限,只有读取权限。有什么办法可以加快查询速度吗?
答案 0 :(得分:0)
您无法按照当前结构化的方式在上次过滤条件中使用索引。
通过将DATE(initiated)
与输入值进行比较,您不允许在initiated
上使用索引(我假设它是时间戳或日期时间字段)并触发全表扫描,因为比较必须计算。
为你的最后一个条件尝试这样的事情:
AND initiated BETWEEN '? 00:00:00' AND '? 23:59:59'
?
是YYYY-MM-DD
格式的变量。
你已经解决了这个问题,你只需确保在extension_number,
flow , and of course
已启动`上有索引。如果没有这些索引,您将无法完全优化查询。因此,如果您对该表没有写访问权并且缺少这些索引,那么您应该与具有该写访问权的人一起查看是否可以添加索引(注意添加索引会影响表上的插入性能)。