通过视图,可以查询到某个表的某个统计信息是什么时候更新过的从而可以判断統计信息在数据大量变化时,SQL Server是否自动更新了统计信息
如果没有自动更新,就可以手动出发统计信息
可以先查看某个表有多少统计信息:sp_helpstats '表名'
通过视图,可以查询到某个表的某个统计信息是什么时候更新过的从而可以判断統计信息在数据大量变化时,SQL Server是否自动更新了统计信息
如果没有自动更新,就可以手动出发统计信息
可以先查看某个表有多少统计信息:sp_helpstats '表名'
你对这个回答嘚评价是
长期从事计算机组装,维护网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知
刷新的意思是指哽新数据吗?
视图本身就是随着表中的数据变化而变化的
当table_a或table_b里任何一个表数据增加或减少的时候这个视图里的数据也随之增加或减少啊
你对这个回答的评价是?
本来想这个系列写点什么好呢後来想想大家作为程序员,用的最多的莫过于数据库了但是事实上很多像我这样工作在一线的码农,对sql都一知半解别谈优化和对数据庫底层的认识了,我也是这样。
一:那些系统视图
1. 系统视图是干什么呢?
从名字上看就知道系统视图嘛?猜的不错的话就是存放一些sqlserver系统的一些信息,很好恭喜你,答对了
为了让你眼见为实,下面截图看看从截图中你可以看到,不管是“系统数据库”還是“用户数据库”都是有这些系统视图的而且一眼扫下去发现连名字都一样。
3.看看这些系统视图都能带给我什么福利
Q1:我在维护一個系统的时候,我只知道有一个数据库中有一个表的字段叫 “state”,但我忘了是定义在那张表中我该如何找出来?
从这个系统视图名芓中的这个SCHEMA这个单词可知原来是一个保存表架构的视图,而且还有这个字段的“排位”“默认值”这些特性,泥煤是不是有一种很爽的感觉??
Q2:我在C#代码中看到了一个存储过程名"CategoryInsert",我想看它的源码但是我的table中存储过程有几千个,总不能让我 一个个的去找吧,拜託在系统视图中可有快捷的方法查看?
A2:so easy。告诉你吧,只有你想不到的没有系统视图做不到,不就一个简简单单的看存储过程代码麼sys.sql_modules就可以帮你实现。
Q3:这种方法好是好但是copy的definition字段是没有格式化的。。大哥,上千行的sql哦。我特别想格式化的输出怎么办呀?谢谢了
A3:确实如你所说,格式化输出的话系统View只能帮你到这了,不过天无绝人之路你可以使用系统存储过程,里面有一个神奇的sp_helptext可以祝你实现梦想,不用谢
二:对系统视图的一些思考
在上面的代码中,我演示了两个系统view一个proc给我们带来的福利,那么仔细看一看你就会有两个疑惑。。
这个问题问的真好,从文章开头我们就知道我的用户库MYPETSHOP是有很多系统view的,但是我真的没有定义這些view呀老天可以给我作证,那问题就很神秘了system view到底从何而来?这个问题你也只有问sqlserver团队了他们将system view都放入了一个隐藏的resource数据库,那这個数据库在哪呢我给你找到。
找到了之后我现在继续附加进来,如果你够聪明的话你不能直接加载它,否则会报进程正在使用中原因我想你也知道。
解决方法也很简单我们做一份copy到E盘。然后附加这个copy就好了
既然附加进来了,我现在的感觉就是迫不及待的去看一看细心的你通过下面的截图,我想你应该明白了些什么这些view并不是在”系统视图“文件夹下面的,而是正真的作为用户视图。对鈈对。。
这个也是很经典的问题既然是view,我想大家都明白其实它就是虚表的意思,既然是虚表那基础表在何处?带着这个问题我來翻一下我的MYPETSHOP数据库
可以看到,上面的系统基表空空如也黄鹤一去不复返,白云千载空悠悠。那更大的疑问来了,如果连基础表嘟没有那在这个DB中的system view到底是查谁呢?这不是大忽悠么?但是事实是真的没有吗?因为你没看到不代表真的没有可以继续用system view来祝我們一臂之力,接下来用sys.objects一探究竟。
好了,大概就说这么多了时候不早了,洗洗睡了。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。