【发布时间】:2016-02-18 00:54:09
【问题描述】:
我在 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 结果:
【问题讨论】:
-
你需要 7000 吗?
-
按照stackoverflow.com/questions/14536165/… 的说明生成要发送到服务器的实际查询。将其与 EXPLAIN 的输出一起粘贴到上面。
-
@RuiLima 我想得到除了 7000 之外的所有东西已经需要很长时间了..
-
@SashaPachev 查看更新。
-
去掉行号的计算有区别吗?而且您的第二个查询似乎与第一个查询不同,
ORDER BY子句已更改。