我在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
结果:
答案 0 :(得分:0)
Shivam Paw和我通过聊天工作。事实证明,MySQL查询本身就很快。但是,我们确定了
print str_repeat('a', $size_of_mysql_result_set);
非常慢(大小约为2.4M)。所以问题出在网络I / O(可能是主机提供商限制),或PHP和Nginx之间的一些问题,从PHP提供大量输出。
更新:
此时有一些选择:
答案 1 :(得分:-1)
有没有一次显示7000行? 如果要显示大数据,则在用户请求结果时基本上是分页列表。
因为没有人可以同时看到7000个数据^^ ;; 考虑来自数据库的动态加载数据。