我有一个获取 17000 行的 MySQL 查询。如果我使用 Putty 在 MySQL 终端中直接执行该查询,则需要 17 ~ 20 秒才能获取所有行。这可以。
但是当我尝试使用带有 AJAX 请求的 PHP 执行查询时,完成请求需要 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)
对这个较长的加载时间有什么想法吗?如果您为此建议任何优化技术,将会是什么?
最佳答案
是的。我刚刚通过分析 Controller 功能发现了这个问题。
根据 Codeigniter 分析结果如下,
Controller 执行时间: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 秒,我的客户被接受了:)
感谢您的回复。
关于php - AJAX请求完成请求时间过长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30323142/