Php AJAX请求完成请求所需时间太长

Php AJAX请求完成请求所需时间太长,php,mysql,ajax,json,codeigniter-2,Php,Mysql,Ajax,Json,Codeigniter 2,我有一个MySQL查询,它得到17000行。如果我使用Putty直接在MySQL终端中执行该查询,那么获取所有行需要17~20秒。这很好 但是,当我尝试使用PHP和AJAX请求执行查询时,完成请求需要50~60秒,甚至这个查询也是缓存的 我使用CodeIgniter PHP框架进行缓存及其AJAX请求 我同意,与终端中直接执行MySQL查询相比,HTTP请求和PHP执行可能需要一些时间 MySQL直接查询执行:20秒 使用HTTP、php、Codeigniter和JSON格式,它被缓存:60秒

我有一个MySQL查询,它得到17000行。如果我使用Putty直接在MySQL终端中执行该查询,那么获取所有行需要17~20秒。这很好

但是,当我尝试使用PHP和AJAX请求执行查询时,完成请求需要50~60秒,甚至这个查询也是缓存的

我使用CodeIgniter PHP框架进行缓存及其AJAX请求

我同意,与终端中直接执行MySQL查询相比,HTTP请求和PHP执行可能需要一些时间

MySQL直接查询执行:20秒 使用HTTP、php、Codeigniter和JSON格式,它被缓存:60秒

我想时差太长了

我正在尝试执行的模型查询:

mysql> explain SELECT col1, col2, col3, col4, IFNULL(col5,'N/A') AS 'col55', `col6`, col7, col8, col9 FROM table1 LEFT JOIN table1 ON table1.fkid_colid=`voyage id` AND table1.alias_type='voyage_display' WHERE column10='voyage';
+----+-------------+--------------+------+-------------------------------------+---------+---------+------------------------------------+-------+-------------+
| id | select_type | table        | type | possible_keys                       | key     | key_len | ref                                | rows  | Extra       |
+----+-------------+--------------+------+-------------------------------------+---------+---------+------------------------------------+-------+-------------+
|  1 | SIMPLE      | table1       | ALL  | NULL                                | NULL    | NULL    | NULL                               | 37770 | Using where |
|  1 | SIMPLE      | table1       | ref  | PRIMARY,fk_table1_colid_idx         | PRIMARY | 4       | database.table1.column ID |     1 | Using index |
+----+-------------+--------------+------+-------------------------------------+---------+---------+------------------------------------+-------+-------------+
2 rows in set (0.00 sec)
你知道这样长的装载时间吗?如果你能为这个问题提出一些优化方法,那就太好了。

你的查询

SELECT 
col1, 
col2, 
col3, 
col4, 
IFNULL(col5,'N/A') AS 'col55', 
`col6`, 
col7, 
col8, 
col9 
FROM table1 
LEFT JOIN table1 ON table1.fkid_colid=`voyage id` AND table1.alias_type='voyage_display' 
WHERE column10='voyage';
从解释计划中可以很清楚地看出,
where
的用法不是使用索引,而是尝试扫描整个表

您需要添加一个索引作为

alter table table1 add index column10_idx(column10);
上述列用于
where子句
,连接子句看起来不错,正在解析索引


确保在应用索引之前备份数据库。应用索引后,检查查询速度。

是。我只是通过分析控制器函数发现了问题

因此,根据Codeigniter分析结果,如下所示

控制器执行时间:27.7074秒

之后,我查看了Chrome控制台完成请求所需的时间,从中我了解到一个问题

Stalled : 17.32 s
DNS Lookup: 1.000 ms
Initial connection  :262.000 ms
Request/Response        TIME
Request sent    0
Waiting (TTFB)  1.03 s
Content Download    29.84 s
Total time: 48.46 s
从报告中可以看出,最大的问题是时间“停滞”。花了17.32秒。这是由于我方代理问题造成的,无法避免,也不会发生在我的客户方。因此,它可以忽略不计

所以

直接查询执行17~20秒

浏览器端内容下载的Ajax请求:29~30秒

因此,3MB内容下载的差异是10秒,我的客户被接受:)


谢谢你的回复

17~20
sec再次偏高您使用的查询是什么?感谢您的回复。这是一个mysql连接查询。是的,请将该查询添加到问题中。也许下面的内容会给出更好的想法
explain select…
这将为您提供问题中的解释计划添加结果。由于安全原因,我无法添加真正的查询。正如您所建议的,我为您的信息添加了一个示例查询,以便您了解一些情况。谢谢。您能为正在使用的表(特别是第10列,上面有“where”字样)添加索引吗?这样可以提高整体性能吗?你真的需要一次返回17k行吗?我有同样的问题。。。我不明白为什么“内容下载”要花这么长时间。。。其他一切都很快。