我正在尝试优化大型MySQL查询。我偶然发现列出所有字段的查询(SELECT Orders.id AS Orders__id, <...>
;默认的CakePHP行为)比仅查SELECT * FROM
的查询要长4倍 - 0.324秒对0.084秒;多次检查。
我想知道我是否可以禁用此行为。我试过了:
将'fields' => '*'
添加到find()
选项或调用->select('*')
,但会导致SELECT Orders.* AS Orders__*
抛出SQLSTATE [42000]错误。
根据query-builder.html#selecting-data使用->select(['*' => '*'])
删除别名标题,但这导致SELECT * AS *
也会引发错误
使用->enableAutoFields(false)
我也试过谷歌,但我甚至不知道怎么称呼这个
答案 0 :(得分:1)
您似乎想要覆盖ORM的好处,因此我将建议一种不应在正常操作中使用的方法。
$datasource = ConnectionManager::get('default');
$datasource->execute('SELECT * FROM some_table;');
如果你想保湿实体,你必须允许select语句为这些字段设置别名,这样上面的内容就不会给你实体。
我的意见是你应该使用正常的选择并优化你的缓存策略。
答案 1 :(得分:0)
显然,由于CakePHP ORM的设计方式,我无法
相反,由manually whitelisting only the fields I actually need解决。毕竟查询仍然相对较快(大约100毫秒。根据我的测量结果)。