0

このようなコードを使用している間:

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

フィールドは varchar です。mysql フィールド cake は次のようなクエリを生成します。

SELECT * FROM Models WHERE field = 1111;

予想の代わりに

SELECT * FROM Models WHERE field = '1111';

これにより、mysql は文字列インデックスを使用する代わりに DB 全体を int にキャストします。他の誰かが書いた既に動作しているシステムを最適化しようとしていますが、クイック grep を実行すると、「修正」する必要がある何千もの検索結果が表示されます。したがって、受け入れられる唯一の解決策は、model-layer または mysql-layer のいずれかです。

tl;dr: Cake が条件から mysql に数値ではなく文字列として整数文字列を渡すようにする方法は?

4

1 に答える 1

0

コメントの文字数が不足した後。あなたは本当にやるべきですか:

PHP (Cake) レベルでの最適化。find() ラッパーは理想的ではありません。それらは信じられないほど強力ですが、非常に遅いです。それらは迅速な開発を可能にしますが、必要以上に多くのクエリを必要とします。

そこで、ボトルネックの修正を試みる必要があります。キャストの有無にかかわらず、DB はおそらく (内部的に) ディスパッチャ チェーンの中で最も高速な部分です。

より具体的にするには:

  • 必要な場合は manual query() を使用してください
  • 可能であれば、アトミック メソッド (updateAll、deleteAll) を使用してみてください
  • 結合でfind()呼び出しを使用してクエリの量を削減する場合は、包含可能でリンク可能な動作(特に最後)を使用してみてください
  • 何らかの方法でデータベースの結果をキャッシュします
于 2012-03-06T21:42:14.827 に答える