AR::findOne() 与 AR::find()->where()->one() 的查询速度问题 [ 2.0 版本 ]
关于AR::findOne()
与AR::find()->where()->one()
及AR::find()->where()->limit(1)->one()
的查询速度问题!
如果是主键查询,以下哪一个查询速度更快?
AR::findOne(5); AR::find()->where(['id'=>5])->one(); AR::find()->where(['id'=>5])->limit(1)->one();
如果是普通查询,以下哪一个查询速度更快?
AR::findOne(['name' => '张三']); AR::find()->where(['name' => '张三'])->one(); AR::find()->where(['name' => '张三'])->limit(1)->one();
最佳答案
其他 1 个回答
-
看看源码吧,稍微试试就能感觉其实没啥明显速度上的区别。
AR的findOne()其实还是走的【查询构造器】而已protected static function findByCondition($condition) { $query = static::find(); if (!ArrayHelper::isAssociative($condition)) { // query by primary key $primaryKey = static::primaryKey(); if (isset($primaryKey[0])) { // if condition is scalar, search for a single primary key, if it is array, search for multiple primary key values $condition = [$primaryKey[0] => is_array($condition) ? array_values($condition) : $condition]; } else { throw new InvalidConfigException('"' . get_called_class() . '" must have a primary key.'); } } return $query->andWhere($condition); }
但是用法其实不一样:
findOne是查找AR模型对象的,一维的。 find()是AR实现【查询构造器】的快捷方式而已。 one是一条记录,一维的。 all是所有记录,二维的。 column是一列多行 scalar()是单行单列的,一个标量。
墨轩娣 无锡
注册时间:2015-03-25
最后登录:17小时前
在线时长:275小时1分
最后登录:17小时前
在线时长:275小时1分
- 粉丝38
- 金钱59785
- 威望150
- 积分64035