这三种方法会按照复杂程度来排列。这个复杂程度并不取决于代码的复杂性,而是取决于准备的复杂性。内嵌查询几乎不需要时间来准备,因为你输入SQL代码就能够获得想要的结果。缓冲查询需要最少的额外思考,因为你需要预先确定数据不会频繁地发生改变。最后,存储过程需要相当多的时间来考虑集成开发环境(IDE)规划以外的东西,以定义所期望的结果,并创建代码来返回这些结果。
内嵌查询是这三种类型中最简单,它使用的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会被保存在系统内存里,直到它能够被页面上的其它代码逻辑更进一步使用。对于这样一个简单的查询而言,需要的步骤相当多了。
此外还要考虑一下,应用程序也会将客户变量保存在数据库里,这会进一步增加数据库的负载。