首页 > 开发 > 综合 > 正文

查找没有索引的表

2024-07-21 02:12:44
字体:
来源:转载
供稿:网友
国内最大的酷站演示中心!

索引是提高sql server性能的关键。也许你已经接手了一个新的sql server,它是其他部门的或者你的公司渴望提高当前sql server性能的。无论怎么样,我们要完成的首要任务之一是看那些没有包含索引的表是否存在。  

你打开两个系统表:sysindexes and sysobjects,查找这些信息。这系统表sysobjects是用来查找表对象和获得表对象名的。sysobjects 表xtype列有一个’u’区别用户表。sysobjects 表的id列是用来作为objectproperty()系统函数的参数,去查找没有索引的表的。第二个参数有tablehasindex的值。是个系统函数如果返回0,这表示表没有索引存在。其他系统表,sysindexes 是用来取得表的行数的。sysindexes系统表有一个indid的列,当indid的值为0时,表示它他是表而不是索引。sysindexes表用来获得表的行的每一列的值。表的行越多,表的访问频率越高决定了为表加上索引提高性能的优先权。

下面的查询是用来查找没有索引的表的:

select (select si.rows
    from sysindexes si
    where si.id = so.id and indid = 0) rows
, so.name
from sysobjects so
where so.xtype = 'u'
    and objectproperty(so.id , 'tablehasindex' ) = 0
order by 1 desc

通过使用同样的查询,你可以用tablehasclusteredindex替代tablehasindex属性来查找那些没有索引簇的表。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表