SQL Server中怎么知道哪些表被访问过?

发布时间 - 2025-07-21 00:00:00    点击率:

要在sql server中查看某个数据库中哪些表被访问过,可以使用动态管理视图(dmv)来查询缓存的查询计划和相应的sql文本。以下是实现这个需求的详细步骤和代码:

首先,我们需要理解两个关键的动态管理视图:

  1. sys.dm_exec_cached_plans:存储查询计划,类似于Oracle中的执行计划,通过复用来减少解析消耗,提高数据检索效率。

  2. sys.dm_exec_sql_text:用于获取与查询计划关联的SQL语句文本。

通过这两个视图,我们可以构造一个查询来找出执行过的SELECT语句,从而了解哪些表被访问过。以下是具体的SQL代码:

SELECT p.refcounts, p.usecounts, sqltext.text 
FROM sys.dm_exec_cached_plans p 
CROSS APPLY sys.dm_exec_sql_text(p.plan_handle) sqltext 
WHERE p.objtype IN ('Adhoc', 'Prepared') 
  AND p.cacheobjtype = 'Compiled Plan' 
  AND sqltext.text NOT LIKE '%sys%' 
  AND sqltext.text NOT LIKE '%fn_listextendedproperty%' 
  AND upper(sqltext.text) LIKE 'SELECT%' 
  AND upper(db_name(sqltext.dbid)) = @DatabaseName 
ORDER BY p.usecounts desc, p.refcounts desc;

在这个查询中:

  • p.refcountsp.usecounts 分别表示引用计数和使用计数,帮助我们了解查询的使用频率。
  • sqltext.text 显示具体的SQL语句文本。
  • WHERE 子句用于过滤出我们感兴趣的查询类型和数据库。
  • @DatabaseName 是你要查询的数据库名称,需要在执行时替换为具体的数据库名。

需要注意的是,这种方法有一些限制:

  • 它只能显示缓存中的查询计划,受限于LRU(Least Recently Used)算法。如果数据库非常繁忙,可能只存储最近执行的查询。
  • 它不提供审计功能,无法追踪历史访问记录,只能反映当前缓存状态。

如果你需要更全面的审计功能,可以考虑使用SQL Server的审计功能(SQL Server Audit),这类似于Oracle中的AUDIT功能,可以提供更细粒度的监控。

如果有其他更好的实现方案,欢迎私信分享!


# linux  # oracle  # sql语句  # red  # sql  # select  # 算法  # 数据库  # 的是  # 如果你  # 子句  # 在这个  # 你要  # 要在  # 感兴趣  # 我们可以  # 这两个  # 这类 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现模型的全局作用域?(Global Scope示例)  Python3.6正式版新特性预览  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  详解jQuery中的事件  利用JavaScript实现拖拽改变元素大小  原生JS获取元素集合的子元素宽度实例  如何在万网利用已有域名快速建站?  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  如何快速查询网址的建站时间与历史轨迹?  如何正确下载安装西数主机建站助手?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  如何在万网自助建站中设置域名及备案?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  如何快速搭建高效WAP手机网站吸引移动用户?  Laravel观察者模式如何使用_Laravel Model Observer配置  Laravel如何使用Blade组件和插槽?(Component代码示例)  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  iOS验证手机号的正则表达式  如何为不同团队 ID 动态生成多个非值班状态按钮  大同网页,大同瑞慈医院官网?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  LinuxShell函数封装方法_脚本复用设计思路【教程】  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  JS中对数组元素进行增删改移的方法总结  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  javascript如何操作浏览器历史记录_怎样实现无刷新导航  如何在VPS电脑上快速搭建网站?  如何挑选高效建站主机与优质域名?  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  如何在服务器上配置二级域名建站?  如何快速搭建支持数据库操作的智能建站平台?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  如何在IIS管理器中快速创建并配置网站?  香港服务器如何优化才能显著提升网站加载速度?  新三国志曹操传主线渭水交兵攻略  如何快速启动建站代理加盟业务?  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  长沙企业网站制作哪家好,长沙水业集团官方网站?  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  Laravel定时任务怎么设置_Laravel Crontab调度器配置  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Laravel如何处理表单验证?(Requests代码示例)