我正在 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+ 行。
我没有数据库的完全写入权限,只有读取权限。我可以做些什么来加快查询速度吗?
最佳答案
您无法按照当前的结构方式在上次过滤条件上使用索引。
通过将 DATE(initied)
与您的输入值进行比较,您将禁止在 initiated
(我假设是时间戳或日期时间字段)和触发器上使用索引全表扫描,因为必须计算比较值。
针对您的最后一个条件尝试这样的操作:
AND initiated BETWEEN '? 00:00:00' AND '? 23:59:59'
在哪里?
是YYYY-MM-DD
格式的变量。
一旦您修复了该问题,您只需确保在extension_number、
flow,当然还有
initated`上有索引。如果没有这些索引,您就无法完全优化查询。因此,如果您对该表没有写访问权限并且这些索引丢失,则应该与具有该写访问权限的人员联系,看看是否可以添加索引(请注意,添加索引会影响表的插入性能)。
关于PHP 从外部数据库中选择非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22236255/