2015-08-26 36 views
0

我正在開發應用程序,隨着應用程序的增長,我的查詢也一樣。

問題:
它需要14秒鐘一組查詢的特定功能,可以執行
解析:如何在php中減少查詢時間

public function doQuery($venueId){ 

    //creating an outlet object using the outlet id. 
    $outlet = new ParseObject("Outlets", $venueId); 

    //querying for total amount of beacons 
    $beacQuery = new ParseQuery("Beacons"); 
    $beacQuery->equalTo("outlet", $outlet); 
    $beacresults = $beacQuery->count(); 

    //querying for outlets based on id 
    //I can't do this by simply calling get() on the object 
    //I created earlier 
    $outletQuery = new ParseQuery("Outlets"); 
    $outletQuery->equalTo("objectId", $venueId); 
    $outletQuery->includeKey("city.states"); 
    $outletQuery->includeKey("city.states.country"); 
    $compResults = $outletQuery->find(); 

    $outletInfo = []; 

    for ($i = 0; $i < count($compResults); $i++) { 
     $object = $compResults[$i]; 
     $cityCheck = $object->get("city"); 
     $statesCheck = $cityCheck->get("states"); 
     $countryCheck = $statesCheck->get("country"); 
     $city = $cityCheck->get("Cities"); 
     $state = $statesCheck->get("stateName"); 
     $country = $countryCheck->get("countryName"); 
     $outletInfo[] = ['venueName' => $object->get('outletName'), 
         'venueAddr' => $object->get('address').', '.$city.', '.$state.', '.$country, 
         'venueEmail' => $object->get('email'), 
         'venueId' => $object->getObjectId(), 
         'totalBeac' => $beacresults, 
        ]; 
    } 
    return $outletInfo; 
} 

我需要知道,如果有簡化的查詢,減少查詢時間及製法頁面加載速度更快(加載速度慢對用戶體驗不利)。

+0

'EXPLAIN'查詢,看看它是如何執行的,然後索引適當的列。 – twentylemon

+0

做@twentylemon說的話,然後再運行'EXPLAIN'。 –

+1

正在索引可能的解析? @twentylemon – lawrenceagbani

回答

1

你應該真的記錄一些分析信息,這樣你就可以看到最花時間。主要你很可能想要改變數據模型來提高速度,特別是計數。保持計數變量更新比搜索和計數項目更有效。看起來您可以爲每個插座添加一個信標計數,並將其更新到雲代碼的保存鉤子中(儘管您需要驗證此邏輯是否符合您的需要)。

此外,你的find()應該是一個get(),因爲你有objectId所以你知道只會有1結果。這將簡化代碼並允許解析更有效地運行(它們可能在內部有一個檢查,他們可能不會,但是無論如何你都可以幫助加快進程速度)。

+1

我修正了它。我在代碼上做了一個基準測試,結果發現只需要1.1秒的時間就可以執行,我繼續使用這些檢查,並在某處看到了一些冗餘代碼,這實際上是問題(我使用的是codeIgniter框架)。您的回答讓我接近解決方案,謝謝。 – lawrenceagbani