我正在使用cakephp,但这可能适用于任何基于框架/ php的环境。
我有一个博客平台,人们可以喜欢,分享,评论等。这些喜欢,分享和评论中的每一个都有一个相关的用户,这意味着从数据库中请求同一个用户多次不同的事情,运行同样的问题:
SELECT `User`.`id`, `User`.`username`, `User`.`fullname`, `User`.`avatar`, FROM `db`.`users` AS `User` WHERE `User`.`id` = 127
除了缓存之外,有没有办法可以阻止这种情况发生?或者,对于相同的信息,MySQL对同一个呼叫进行5次或更多次并不重要吗?
由于
答案 0 :(得分:1)
您可以在模型上将递归设置为-1,这将导致读取和查找最初仅从该模型获取数据,除非动态设置,但是,我更喜欢可包含的行为以减少查询。你可以在这里查看。
http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html
答案 1 :(得分:1)
这是CAKE方式 - 获取许多简单查询并缓存它们。
检查您的所有$this->YourModelName->find()
查询 - 可能您不使用递归或包含选项,因此当您获取评论数据时,CAKE也会采用相关模型(hasMany/belongsTo
关系你的模特)。你可以:
$this->loadModel(YourModelName);
即时加载模型$this->YourModelName->Behaviors->attach('Containable');
附加选定的模型和字段recursive => -1
仅从一个模型/表格中获取数据join
选项查询(可以是一个查询,而不是contain
或recursive
选项)$this->Session->write()
$this->Auth->user('id')
$useTable = false
并动态链接模型,但这不是有效/经济的方式(特别是当您需要在更长时间内管理项目时)