簡體   English   中英

MySql查詢需要很長時間的PHP

[英]MySql Query Takes A Long Time PHP

我在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結果:

我和Shivam Paw通過聊天進行了這項工作。 事實證明,畢竟MySQL查詢本身是快速的。 但是,我們確定

print str_repeat('a', $size_of_mysql_result_set);

速度非常慢(大小約為240萬)。 因此,問題可能出在網絡I / O(可能是托管服務提供商的節流)中,或者是PHP和Nginx之間在為PHP提供大量輸出方面存在一些問題。

更新:

此時的一些選項:

  • 重新架構該應用程序,使其不會一次獲取2 MB以上的內存。 也許一開始就抓住了您需要立即顯示的內容,然后在后台獲取其余的內容,或者更好的是,只有在用戶實際需要時才獲取它
  • 在Nginx中啟用壓縮( https://rtcamp.com/tutorials/nginx/enable-gzip/
  • 與您的托管服務提供商協商更好的帶寬協議或尋找其他提供商

是否有任何情況一次顯示7000行? 如果要顯示大量數據,則在用戶請求結果時基本上是分頁列表。

因為沒有人可以一次看到7000個數據^^ ;; 考慮從數據庫動態加載數據。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM