请教下关于findcount的效率的问题!

#1 billgame

大家好!
在这里向大家请教一个问题哈。
我现在想在一个超过5万用户的数据表中查询是否已经存在某个用户,目前我是使用findcount来查询的,代码如下:
//构建查询条件
  $conditions=array(
   'name'=>'zhangsan',
         );
  $db_user = spClass("user");
  $sum = $db_user->findCount($conditions);

然后根据$sum 是否为0来判断是否已经存在该用户。
当然,我知道还有另外一种方式,那就是根据改用户名直接查询看是否有记录,代码就不贴了。
请教下大家,这两种方式哪个效率更高?
或者哪位大侠有更好的方式可以判断?

谢谢。

2012-02-11 11:01:25

#2 jake

其实,这里你说的“另外一种方式”,其实和你上面的代码是一样的,只是表达上不同而已。

1. 上面代码的:查找匹配该用户名的记录有多少,1条是已存在,0条是不存在
2. “另一种方法”:查找匹配该用户名的记录,查到就是存在,查不到就是不存在

效率是差不多的,不过“另一种方法”理论上快一点点,因为它只要匹配一条记录。

从代码表达上来说,我也建议用“另一种方法”,因为其是表达了“查查是否存在该用户”的思维,只要“有”或者“没有”,而不是0条、1条或者n条。

2012-02-11 11:16:27

#3 billgame

jake 发表于 2012-2-11 11:16
其实,这里你说的“另外一种方式”,其实和你上面的代码是一样的,只是表达上不同而已。

1. 上面代码的: ...
多谢jake的回复,我这边马上改下看看能否提高点效率。

不知道其他人都是怎么操作的,比如我们注册微博的时候,她肯定是要拿当前注册的用户名去数据库比对是否已经存在了的。

那他们也是这样查询的方式?

2012-02-11 12:09:38

#4 jake

billgame 发表于 2012-2-11 12:09
多谢jake的回复,我这边马上改下看看能否提高点效率。

不知道其他人都是怎么操作的,比如我们注册微博的 ...
如果是新浪微博那么大的庞大的数据量,我觉得应该注册的时候,用户名对比是通过类似memcache集群的hash值对比匹配来进行的。

2012-02-11 12:31:06

#5 thinksaas

看过代码啦,findCount()的效率还是很高的
$sql = "SELECT COUNT({$this->pk}) AS SP_COUNTER FROM {$this->tbl_name} {$where}";
语句中有COUNT()存在,呵呵。

2012-02-11 18:08:56