2

我到处找,找不到这个令人费解的问题的答案。

我可以用 Criteria 做几乎所有事情(尽管它可能看起来像代码一样“糟糕”),就像我可以用 createCommand 做的一样。

所以我的问题是:是否存在性能差异,还是只有两种方法可以获得相同的结果?

4

2 回答 2

4

CDbCriteria 和 createCommand 都是在 Yii 框架中创建查询的方法。除此之外,有时您需要不使用这种方式直接运行 mysql 查询。

当您需要使用关系运行连接操作时,使用 CDbCriteria 创建复杂查询非常简单,并且比 createCommand 更好。

但是在性能基础上,createCommand 比 CDbCriteria 更好,因为 CDbCriteria 执行一些模式级别的查询来获取表列,并在每次使用 CDbCriteria 时为每个表执行。而 createCommand 直接执行 mysql 查询,它不需要运行模式级别的查询。

当您开始缓存查询时,性能级别两者几乎相似。

CDbCriteria 的一个更好的功能是它的关系查询。所以我更喜欢使用 CDbCriteria 和 Let yii 以自己的方式处理查询。

于 2012-08-17T05:37:40.183 回答
2

CDbCriteria 恰好是对某些 CDbConnection(通常是 DAO)功能的一种封装。例如,在 ActiveRecord 模型中,大多数查询函数,如 find() 和类似函数,使用 CDbCriteria 对象来初始化 CommandBuilder 实例。这样,在性能上存在实际差异,因为使用 CDbcriteria 实际上需要一些 php 执行来生成 db 命令。不过,我必须说,这不是毫无意义的。参考资料告诉我们:

尽管 Yii DAO 几乎可以处理任何与数据库相关的任务,但很有可能我们会花费 90% 的时间来编写一些执行常见 CRUD(创建、读取、更新和删除)操作的 SQL 语句。当它们与 SQL 语句混合时,我们的代码也很难维护。为了解决这些问题,我们可以使用 Active Record。

于 2012-08-16T20:45:11.677 回答