gpt4 book ai didi

mysql - 我可以减少 CakePHP 在这里进行的数据库查询的数量吗?

转载 作者:行者123 更新时间:2023-11-29 03:48:42 26 4
gpt4 key购买 nike

所以我有一个看起来像这样的 Cake 查询:

$forthcomingReleases = $this->Release->find('all', array(
'contain'=>array('Artist.name', 'Artist.slug', 'Releasetype.type', 'Format.Mediatype.name'),
'conditions'=>array('release_date >' => date('Ymd'), 'Release.is_deleted' => false),
'order'=>array('release_date DESC'),
'limit'=>10
));

我在 SQL 转储中看到的是这样的事情:

45  SELECT `Artist`.`name`, `Artist`.`slug` FROM `artists` AS `Artist` WHERE `Artist`.`id` = 10021      1   1   167
46 SELECT `Artist`.`name`, `Artist`.`slug` FROM `artists` AS `Artist` WHERE `Artist`.`id` = 10159 1 1 168
47 SELECT `Artist`.`name`, `Artist`.`slug` FROM `artists` AS `Artist` WHERE `Artist`.`id` = 10021 1 1 170
48 SELECT `Artist`.`name`, `Artist`.`slug` FROM `artists` AS `Artist` WHERE `Artist`.`id` = 10159 1 1 168
49 SELECT `Artist`.`name`, `Artist`.`slug` FROM `artists` AS `Artist` WHERE `Artist`.`id` = 1338 1 1 169
50 SELECT `Artist`.`name`, `Artist`.`slug` FROM `artists` AS `Artist` WHERE `Artist`.`id` = 10159 1 1 187
51 SELECT `Artist`.`name`, `Artist`.`slug` FROM `artists` AS `Artist` WHERE `Artist`.`id` = 569 1 1 211
52 SELECT `Artist`.`name`, `Artist`.`slug` FROM `artists` AS `Artist` WHERE `Artist`.`id` = 569 1 1 168
53 SELECT `Artist`.`name`, `Artist`.`slug` FROM `artists` AS `Artist` WHERE `Artist`.`id` = 10451 1 1 182
54 SELECT `Releasetype`.`type` FROM `releasetypes` AS `Releasetype` WHERE `Releasetype`.`id` = 901 1 1 170
55 SELECT `Releasetype`.`type` FROM `releasetypes` AS `Releasetype` WHERE `Releasetype`.`id` = 901 1 1 171
56 SELECT `Releasetype`.`type` FROM `releasetypes` AS `Releasetype` WHERE `Releasetype`.`id` = 901 1 1 180
57 SELECT `Releasetype`.`type` FROM `releasetypes` AS `Releasetype` WHERE `Releasetype`.`id` = 900 1 1 171
58 SELECT `Releasetype`.`type` FROM `releasetypes` AS `Releasetype` WHERE `Releasetype`.`id` = 900 1 1 183
59 SELECT `Releasetype`.`type` FROM `releasetypes` AS `Releasetype` WHERE `Releasetype`.`id` = 901 1 1 171
60 SELECT `Releasetype`.`type` FROM `releasetypes` AS `Releasetype` WHERE `Releasetype`.`id` = 901

(这只是为了说明目的的摘录,还有更多的疑问。)

即使这些查询中的每一个只用了不到 200 毫秒,它们似乎仍然可能会产生一些重要的东西,而且当如此多的查询是重复的时,这尤其令人讨厌 - 例如所有 Releasetype.types 都是 900 或 901。

有什么方法可以重构我的查询、我的模型关系或其他东西,以便在更少的调用中检索数据?

最佳答案

Cake 正在执行一个“主要”查询。在这种情况下,“发布”模型会找到,并且对于在那里找到的每一行,它都会执行查询以获取您在“包含”中指定的数据。

这是预期的行为。

我看到的一个大问题是您的声明“这些查询只用了 <200 毫秒”。 Imo 他们不应该花费超过 1ms 甚至 0ms。看来您需要正确索引该表。

我不是特别喜欢强制蛋糕进行连接,就好像它本来就是蛋糕开发者会让它连接的。

如果您真的想降低查询计数,即使不需要,请查看 a) linkable behavior b) bindModel c) adhoc-joins

关于mysql - 我可以减少 CakePHP 在这里进行的数据库查询的数量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6590355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com