4.我到处都找不到这个令人费解的问题的答案
我几乎可以用标准做任何事情(尽管它看起来像代码一样“糟糕”),就像我可以用createCommand做的那样。
所以我的问题是:是否存在性能差异,或者只有两种方法可以获得相同的结果?
发布于 2012-08-17 13:37:40
CDbCriteria和createCommand都是在Yii框架中创建查询的方法。此外,有时您需要直接运行mysql查询,而不使用这些方法。
使用CDbCriteria创建复杂的查询非常简单,当您需要使用关系运行连接操作时,它比createCommand更好。
但在性能方面,createCommand比CDbCriteria更好,因为每次我们使用CDbCriteria时,CDbCriteria都会执行一些模式级别的查询来获取表列,并为每个表执行查询。createCommand直接执行mysql查询,而不需要执行模式级查询。
当您开始缓存查询时,两者在性能级别上几乎是相似的。
关于CDbCriteria的一个更好的功能是它的关系查询。因此,我更喜欢使用CDbCriteria和Let yii以自己的方式处理查询。
发布于 2012-08-17 04:45:12
CDbCriteria恰好是对某些CDbConnection (一般称为DAO)功能的一种封装。例如,在ActiveRecord模型中,大多数查询函数,如find()和similars,都使用CDbCriteria对象来初始化CommandBuilder实例。这样,在性能上就会有实际的差异,因为使用CDbcriteria实际上需要执行一些php来生成db命令。但是,我必须说,这是毫无意义的;reference告诉我们:
虽然Yii DAO几乎可以处理任何与数据库相关的任务,但我们很可能会花费90%的时间来编写一些执行常见CRUD (创建、读取、更新和删除)操作的SQL语句。当代码与SQL语句混合在一起时,维护代码也很困难。为了解决这些问题,我们可以使用Active Record。
https://stackoverflow.com/questions/11988220
复制相似问题