在ColdFusion里取得recordset的最佳方法

ZDNet软件频道 时间:2003-08-29 作者:ZDNet China |  我要评论()
本文关键词:
在ColdFusion(CF)里,操控数据库recordset的方法有三种,我会解释这三种方法中的每一种,这样你就能够自己决定应该在什么时候以及在什么地方使用它们。
本文译自Builder.com,未经许可请勿转载在ColdFusion(CF)里,操控数据库recordset的方法有三种:内嵌式查询(inline query)、缓冲查询(cached query)和存储过程(stored procedure)。它们每种都有其自身的长处和短处,也有其使用的正确场合。我会解释这三种方法中的每一种,这样你就能够自己决定应该在什么时候以及在什么地方使用它们。

这三种方法会按照复杂程度来排列。这个复杂程度并不取决于代码的复杂性,而是取决于准备的复杂性。内嵌查询几乎不需要时间来准备,因为你输入SQL代码就能够获得想要的结果。缓冲查询需要最少的额外思考,因为你需要预先确定数据不会频繁地发生改变。最后,存储过程需要相当多的时间来考虑集成开发环境(IDE)规划以外的东西,以定义所期望的结果,并创建代码来返回这些结果。




本文不会在所包含的例子里提供优化过的SQL代码或者代码逻辑。我所提供的代码仅仅是用于说明的目的。
内嵌查询

内嵌查询是这三种类型中最简单,它使用的CF标签是最基本但是却是最强大的标签之一。<cfquery>标签是Web应用程序的基础,这就要回溯到CFML还是DBML的时候。有了一个快速的SQL陈述式,你就能够将resultset从数据库服务器带到你的应用程序里。下面是一个例子:

<cfquery name="Your_Info" datasource= "mainDB ">

select* from site_users where user_id = #client.user_id#

</cfquery>

这段代码会这个特定客户的user_id选择匹配的信息。很显然,这段代码必须在客户每次请求这条信息的时候运行,因为每个客户都有一个不同的user_id。

从技术上讲,这段代码没有任何问题。你可以按这种方式编写对数据库的每次调用,但是随着流量的增加,这种方法可能会开始拖累你网站的性能。为什么?

想一想这段代码在运行的时候会发生什么。CF服务器会处理#client.user_id#的值,并将这个变量字符串用正确的值来替代,然后将查询送到数据库服务器。数据库服务器需要处理这个SQL陈述式并收集recordset;这个recordset然后会被发送回CF服务器,而recordset会被保存在系统内存里,直到它能够被页面上的其它代码逻辑更进一步使用。对于这样一个简单的查询而言,需要的步骤相当多了。

此外还要考虑一下,应用程序也会将客户变量保存在数据库里,这会进一步增加数据库的负载。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134