首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

只做必须做的

Doing Only What Is Required

开发者使用count(*)往往只是为了测试“是否存在”。这通常是由以下的需求说明引起的:

如果存在满足某条件的记录

那么处理这些记录

用代码直接实现就是:

select count(*)

into counter

from table_name

where <certain_condition>

if (counter > 0) then

当然,在 90% 的情况下,count(*) 是完全不必要的,正如上面的例子。要对多项记录进行操作,直接做即可,不必用count(*)。即使一个操作对任何记录都没有影响,也没有关系,不用count(*)没有什么不好。而且,即使要对未知的记录进行复杂处理,也能通过第一个操作就确定并返回受影响的记录——要么通过特殊的 API (例如 PHP 中的 mysql_affected_rows()),要么采用系统变量(Transact-SQL 中为@@ROWCOUNT,PL/SQL 中为SQL%ROWCOUNT),若使用内嵌式 SQL,则使用SQL通讯区(SQL Communication Area,SQLCA)的特殊字段。有时,可以通过函数访问数据库然后直接返回要处理的记录数,例如 JDBC 的executeUpdate()方法。总之,统计记录数极可能意味着重复全部搜索,因为它对相同数据处理了两次。

此外,如果是为了更新或插入记录(常使用count检查键是否已经存在),一些数据库系统会提供专用的语句(例如Oracle 9i 提供MERGE 语句),其执行效率要比使用count高得多。

总结:没必要编程实现那些数据库隐含实现的功能。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论