Php AJAX请求完成请求所需时间太长
我有一个MySQL查询,它得到17000行。如果我使用Putty直接在MySQL终端中执行该查询,那么获取所有行需要17~20秒。这很好 但是,当我尝试使用PHP和AJAX请求执行查询时,完成请求需要50~60秒,甚至这个查询也是缓存的 我使用CodeIgniter PHP框架进行缓存及其AJAX请求 我同意,与终端中直接执行MySQL查询相比,HTTP请求和PHP执行可能需要一些时间 MySQL直接查询执行:20秒 使用HTTP、php、Codeigniter和JSON格式,它被缓存:60秒 我想时差太长了 我正在尝试执行的模型查询: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> 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行吗?我有同样的问题。。。我不明白为什么“内容下载”要花这么长时间。。。其他一切都很快。