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

标签 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+ 行。

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

最佳答案

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

通过将 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/

相关文章:

php - (Wordpress/WPDB/WP 客户评论)计算 1*、2*、3*、4* 和 5* 评论的数量?

php - "%"MySQL 问题

MYSQL:每周返回产生最多广告的视频

php - 在 PHP 中使用自动加载不好吗?

php-Mysql : ID of added row in database

java - 如何避免表单中的文本字段在数据库中出现重复项

php - 将关联值从一个表存储到mysql中的另一表

php - 如何在一列中插入多个选择框项目

MySQL实现基于多个过滤器的搜索

mysql - 查询优化(MySql/Sql): Moving functions out of where clause