我正在删除我的数据库中没有相应注销记录的登录记录,但是现在它很慢这样做:
首先它获取循环查询以检查删除 接下来需要查明该用户的下一条记录是登录还是注销,如果是登录,我将其删除。
要获取该类型的下一条记录,它会执行查询查询:
<cfquery dbtype="query" name="getnext" maxrows="1">
SELECT * FROM getlogs WHERE id > #id# AND logType = 'login'
</cfquery>
但它很慢,做了几千次就需要大约56秒。
更快的方法是什么?我的循环中的另一个cfloop(基本上是一个循环,直到我到达我想要的行)会更快吗?还有另一种方式吗?
答案 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服务器之间的往返。