Coldfusion很多循环与查询查询

时间:2011-03-02 14:23:14

标签: loops coldfusion row coldfusion-8

我正在删除我的数据库中没有相应注销记录的登录记录,但是现在它很慢这样做:

首先它获取循环查询以检查删除 接下来需要查明该用户的下一条记录是登录还是注销,如果是登录,我将其删除。

要获取该类型的下一条记录,它会执行查询查询:

<cfquery dbtype="query" name="getnext" maxrows="1">
SELECT * FROM getlogs WHERE id > #id# AND logType = 'login'
</cfquery>

但它很慢,做了几千次就需要大约56秒。

更快的方法是什么?我的循环中的另一个cfloop(基本上是一个循环,直到我到达我想要的行)会更快吗?还有另一种方式吗?

2 个答案:

答案 0 :(得分:6)

这听起来像是可以完全在一个查询中完成的事情 - 可能是这样的:

delete from login_table t
where exists (
  select id
  from   login_table
  where  id > t.id
  and    logtype = 'login'
)

这与ColdFusion本身无关;同样的方法适用于任何环境。如果这是一个对应用程序没有同步依赖的维护功能,你甚至可以将它粘贴到数据库本身中反复出现的“清理”任务自动调用的存储过程中。

答案 1 :(得分:0)

最好的办法是在sql中使用游标或临时表来完成所有操作。这样可以节省CF和sql服务器之间的往返。