2012-03-06 31 views
0

在使用這樣的碼:CakePHP的模型的find()未擊中的MySQL索引B/C

$Model->find('all', array(
    'conditions' => array(
    'field' => '1111' 
) 
)); 

其中字段是VARCHAR MySQL的字段蛋糕產生這樣的查詢:

SELECT * FROM Models WHERE field = 1111; 

,而不是預期的

SELECT * FROM Models WHERE field = '1111'; 

這也使得MySQL的投整個DB爲int而不是使用字符串索引。 我想優化一個已經工作的系統,由別人編寫,並且quick-grep顯示了我需要「修復」的數千個find。因此,唯一可接受的解決方案應該是模型層或mysql層。

tl; dr:如何使Cake從條件傳遞整數字符串到MySQL作爲字符串而不是數字?

+0

你顯然是在錯誤的瓶頸上工作......耶穌,畢竟你在使用蛋糕。反正它不是最快的框架。在數據庫級別進行優化 - 在這樣一個小用例中 - 與整個調度程序過程完全無關。只是使用find()包裝器,你正在銷燬一百萬個投射優化修復程序。但是什麼,沒人在乎。因爲雖然速度很慢,但它是最強大和最棒的框架。所以繼續編碼,不要爲這些小事煩惱。 – mark 2012-03-06 21:40:26

回答

0

用完評論中的字符後。 你真的應該這樣做:

優化在PHP(蛋糕)水平。 find()包裝器並不理想。他們非常強大但非常緩慢。他們允許快速開發,但需要更多的查詢。

所以你應該嘗試做一些瓶頸固定。 數據庫可能(內部)仍然是調度器鏈中最快的部分 - 有或沒有演員表。

爲了得到更具體:

  • 使用手冊查詢(),如果你覺得你必須
  • 嘗試使用原子方法(updateAll,deleteAll)在可能的情況
  • 嘗試使用中可容納和可鏈接行爲(特別是最後一個),如果你使用find()調用使用連接,以減少查詢量
  • 緩存您的分貝結果不知何故