MySql查询花了很长时间PHP

时间:2015-11-16 20:02:17

标签: php mysql laravel

我在Laravel中有以下PHP代码正在执行MySql查询:

DB::statement(DB::raw("SET @rownum = 0"));
$sql = "@rownum := @rownum+1 AS rank, id, clanid, name, location, level, exp, warslost, warstied, warwinpercent, warswon, playercount, score";
$clan = Clans::orderBy('clanid', 'asc')
    ->selectRaw($sql)
    ->take(7000)
    ->get();

此查询需要很长时间才能执行。

我对我订购的列以及许多其他查询的列都有索引。

我该怎么办?

更新

执行的查询:

SET @rownum = 0

select @rownum := @rownum+1 AS rank, id, clanid, name, location, level, exp, warslost, warstied, warwinpercent, warswon, playercount, score from `clans` order by `clanid` asc limit 7000

EXPLAIN EXTENDED结果:

2 个答案:

答案 0 :(得分:0)

Shivam Paw和我通过聊天工作。事实证明,MySQL查询本身就很快。但是,我们确定了

print str_repeat('a', $size_of_mysql_result_set);

非常慢(大小约为2.4M)。所以问题出在网络I / O(可能是主机提供商限制),或PHP和Nginx之间的一些问题,从PHP提供大量输出。

更新:

此时有一些选择:

  • 重新设计应用程序,以便一次性获取2+ MB。也许抓住你最初需要立即展示的东西,然后在后台获取其余的东西 - 或者更好的是,只有当用户真正需要它时
  • 在Nginx(https://rtcamp.com/tutorials/nginx/enable-gzip/
  • 中启用压缩
  • 与您的托管服务提供商协商更好的带宽协议或寻找其他提供商

答案 1 :(得分:-1)

有没有一次显示7000行? 如果要显示大数据,则在用户请求结果时基本上是分页列表。

因为没有人可以同时看到7000个数据^^ ;; 考虑来自数据库的动态加载数据。

http://laravel.com/docs/5.1/pagination