我正在尝试优化一个大型mysql查询。我意外地发现一个包含所有字段的查询( SELECT Orders.id AS Orders__id, <...>
; 默认的cakephp行为)比仅使用 SELECT * FROM
-0.324秒对0.084秒;检查了好几次。
我想知道我是否可以禁止这种行为。我试过:
添加 'fields' => '*'
到 find()
选择或呼叫 ->select('*')
,但它会导致 SELECT Orders.* AS Orders__*
抛出一个sqlstate[42000]错误。
用…除去别名标题 ->select(['*' => '*'])
根据query builder.html#选择数据,但这会导致 SELECT * AS *
这也会引发一个错误
使用 ->enableAutoFields(false)
我也试过谷歌,但我甚至不知道怎么称呼这个
2条答案
按热度按时间6ie5vjzr1#
似乎你想覆盖orm的好处,所以我建议一个不应该在正常操作中使用的方法。
如果要创建实体,必须允许select语句对字段进行别名,这样上面的语句就不会为您提供实体。
我的意见是,您应该使用正常的选择和优化您的缓存策略为这些数据。
lfapxunr2#
显然,我不能不列出字段,因为cakephp orm是如何设计的。
因此,通过手动白名单只解决我实际需要的字段。这个查询毕竟还是比较快的(根据我的测量大约是100毫秒)。