CakePHP模型的find()没有命中整数字符串的mysql索引b / c

时间:2012-03-06 20:53:37

标签: mysql cakephp numeric database-indexes

使用这样的代码时:

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

其中field是varchar mysql field cake生成如下查询:

SELECT * FROM Models WHERE field = 1111;

而非预期

SELECT * FROM Models WHERE field = '1111';

这也使得mysql将整个DB转换为int而不是使用字符串索引。 我正在尝试优化其他人编写的已经正常工作的系统,而快速grep显示了我需要“修复”的数千个查找。因此,唯一可接受的解决方案应该是模型层或mysql层。

tl; dr:如何使Cake将条件中的整数字符串作为字符串传递给mysql而不是数字?

1 个答案:

答案 0 :(得分:0)

在评论中用尽了字符。 你真的应该这样做吗?

在PHP(蛋糕)级别进行优化。 find()包装器并不理想。它们非常强大但非常慢。它们允许快速开发,但需要更多的查询。

所以你应该尝试做一些瓶颈固定。 数据库可能(内部)仍然是调度程序链中最快的部分 - 有或没有强制转换。

更具体:

  • 如果您认为必须
  • ,请使用手动查询()
  • 尽可能使用原子方法(updateAll,deleteAll)
  • 如果使用带连接的find()调用来减少查询量,则尝试使用可包含且可链接的行为(尤其是最后一行)
  • 以某种方式缓存您的数据库结果