微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何优化访问计数器SQL查询?

如何解决如何优化访问计数器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 有所帮助,尤其是随着表的增长。如果您当前的版本很慢,那么我怀疑网络开销比查询的实际执行更重要。

与其先获取 IDtoday,然后再决定是否需要在 asp 中使用 INSERTUPDATE,不如通过 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 举报,一经查实,本站将立刻删除。