如何解决如何优化访问计数器SQL查询?
使用 sql Server 2016 我创建了 VISIT 表,其中包含 3 列 ID、今天、计数器。这是我用来计算每日访问量的 asp 代码。目前这张表有2000多条记录:
import { AppProps } from 'next/app'
const MyApp = ({ Component,pageProps }: AppProps) => {
return (
<>
<Header />
<Component {...pageProps} />
</>
)
}
ID 列是主键,我还在 settoday 列上创建了一个索引。但是当我检查事件探查器时,更新查询需要很长时间才能执行。我还能做些什么来优化更新代码?
解决方法
我认为您可以通过避免两次访问数据库而获益良多。
此外,您应该始终尝试使用占位符和参数,而不是连接值等。我认为这不是什么大问题,因为我认为 today
不是用户提供的值,但仍然如此。
2000 条记录并不多,但确实如此,将索引放在 settoday
将 有所帮助,尤其是随着表的增长。如果您当前的版本很慢,那么我怀疑网络开销比查询的实际执行更重要。
与其先获取 ID
的 today
,然后再决定是否需要在 asp 中使用 INSERT
或 UPDATE
,不如通过 SQL 中的 1 个单一操作来完成.
我已经很久没有写这种代码了,我不得不用记事本写下来,所以你可能需要在这里和那里修复一些问题,但我认为这是一个开始:
<%
sql = "DECLARE @today datetime = ?
UPDATE counter
SET counter = counter + 1
WHERE settoday = @today
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO visit (settoday,counter) values (@today,1)"
END"
set command = server.createobject("ADODB.Command")
set command.ActiveConnection = ...
command.QueryText = sql
command.CommandType = adCmdText
command.Parameters.Append(command.CreateParameter("@p1",adDate,adParamInput,today))
command.Execute
%>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。