2011-05-10 53 views
0

我要說的大部分結果是顯而易見的,但我正在尋找可能在覈心或其他修改中可用的任何其他配置選項或建議我可以編寫腳本:CakePHP輸出緩慢,但查詢似乎達到參數

  1. 我將CakePHP應用程序從開發切換到生產服務器。

  2. 我測試的查詢需要兩倍的時間在新服務器上處理(大約10-12秒)。對於這個測試,我實際上是在計算屏幕結果加載時間。因此,從第二個提交按鈕被按下到實際的視覺輸出結果完成。

  3. 我查詢由CakePHP的調試輸出(完全相同的查詢):

- 發展:132個查詢了5毫秒 - 生產:132個查詢了53毫秒。

很明顯,查詢運行速度差異很大,但即使是較慢的結果也不到一秒!

看起來網絡或處理器的速度變慢了,但我在MySQL基準測試中沒有足夠的經驗來證明這是一個Controller負載問題還是一個實際的MySQL問題。事實上,在較慢的結果是53ms不會導致我相信我的MySQL查詢速度慢,它似乎在實際輸出中放緩正在發生的地方..

這是一個鏈接到一個完整的MySQL查詢調試轉儲: http://notepub.com/#fb=&note=185197

我試過刪除部分的查詢,改變我的連接方法,並且我也使用包含輸出結果。我將繼續測試..感謝您的任何反饋或想法。

回答

0

這個答案比一個答案炒作,但它可以幫助你反正:

看你的日誌,有真的只有一個查詢要帶任何時候,它的:

SELECT `Zip`.`id`, `Zip`.`title`, `PlansZip`.`id`, `PlansZip`.`plan_id`, `PlansZip`.`zip_id` FROM `zips` AS `Zip` JOIN `plans_zips` AS `PlansZip` ON (`PlansZip`.`plan_id` IN (253, 774, 137, 505, 114, 260, 501, 841, 268, 239, 497, 762, 768, 246, 123, 750, 756, 130, 886, 836, 839, 315, 331, 299) AND `PlansZip`.`zip_id` = `Zip`.`id`) ORDER BY `Zip`.`title` ASC 

我認爲它花費這麼長時間的原因是你加入這兩張牌桌的方式。我想你會發現這樣的事情會更快:

SELECT `Zip`.`id`, `Zip`.`title`, `PlansZip`.`id`, `PlansZip`.`plan_id`, `PlansZip`.`zip_id` FROM `zips` AS `Zip` JOIN `plans_zips` AS `PlansZip` ON `PlansZip`.`zip_id` = `Zip`.`id` 
WHERE `PlansZip`.`plan_id` IN (253, 774, 137, 505, 114, 260, 501, 841, 268, 239, 497, 762, 768, 246, 123, 750, 756, 130, 886, 836, 839, 315, 331, 299) ORDER BY `Zip`.`title` ASC 

我做我自己的數據庫可比查詢,發現使用第二種方法減少了一個漂亮的顯著因素運行查詢所需的時間。

我提出的另一個問題是,你的開發系統是否是生產系統的一面鏡子。如果您的產品系統中有更多的記錄,您可能會看到緩慢的查詢無法擴展。返回和生產記錄的數量有什麼區別?即使SQL不是問題,但它可能在傳輸大量數據或甚至將其呈現在屏幕上時滯。

+0

我刪除了我的最後一條評論,因爲我不認爲我的SQL在我的測試中是正確的。我在下面發佈了我的當前代碼,並且我正在嘗試翻譯和調整以符合您的建議。感謝您的任何意見。 – OldWest 2011-05-10 21:52:57

0

我想我遇到的問題的一部分是我的查詢完成CakePHP樣式,並且我正在研究如何翻譯您擁有的。

這是我原來的:(?網絡)

array(
     'joins'  => array(
      array(
       'table'  => 'plans_zips', 
       'alias'  => 'PZips', 
       'type'  => 'inner', 
       'foreignKey' => false, 
       'conditions' => array('Plan.id = PZips.plan_id') 
      ), 
      array(
       'table'  => 'zips', 
       'alias'  => 'Zips', 
       'type'  => 'inner', 
       'foreignKey' => false, 
       'conditions' => array('Zips.id = PZips.zip_id') 
      ), 
     ), 
0
  1. 查詢129檢索10563行,很自然地會導致一些用於行
  2. 的這種量的流量如果你想加快你的查詢,你可以嘗試添加索引以下字段: PlansZip.plan_id PlansZip.zip_id
  3. 調整你的查詢作爲user470714建議