【转】SQL SERVER获取索引脚本
关于如何获取索引脚本的语句很多,上次在项目中需要去查询并获取索引脚本,所以写了一个简单的查询语句来进行获取。
WITH idxcol
AS ( SELECT
i.object_id ,
i.index_id ,
OBJECT_NAME(i.object_id) AS objname ,
i.name AS idxname ,
ocol.name AS colname ,
i.type AS idxtype ,
i.type_desc AS idxtypedesc ,
i.is_unique ,
i.is_primary_key ,
i.is_unique_constraint ,
i.fill_factor ,
icol.key_ordinal AS idxcoloder ,
icol.is_descending_key ,
icol.is_included_column ,
pt.row_count ,
pt.used_page_count * 8 *1024.0 / POWER(1024, 2) AS [usedrowpage_mb] ,
pt.reserved_page_count * 8 *1024.0 / POWER(1024, 2) AS [allrowpage_MB]--,
--*
FROM
sys.indexes i ,
sys.index_columns icol ,
sys.columns ocol ,
sys.dm_db_partition_stats pt
WHERE
i.object_id = icol.object_id
AND i.index_id = icol.index_id
AND icol.object_id = ocol.object_id
AND icol.column_id = ocol.column_id
AND i.object_id = pt.object_id
AND i.index_id = pt.index_id
AND EXISTS ( SELECT
1
FROM
sys.objects o
WHERE
o.object_id = i.object_id
AND o.type = 'U' ))
SELECT
* ,
N'CREATE ' + t.idxtypedesc COLLATE Latin1_General_CI_AS_KS_WS +
N' INDEX ' + t.idxname COLLATE Latin1_General_CI_AS_KS_WS +
N' ON ' + t.objname COLLATE Latin1_General_CI_AS_KS_WS +
N'(' + CASE WHEN t.colsinc IS NULL THEN
t.cols COLLATE Latin1_General_CI_AS_KS_WS
ELSE
--REPLACE(cols,t.colsinc,'') COLLATE Latin1_General_CI_AS_KS_WS
SUBSTRING(cols,LEN(colsinc)+2,LEN(cols)-LEN(colsinc))
END
+ N')'+CASE WHEN t.colsinc IS NOT NULL THEN ' INCLUDE('+t.colsinc+')' ELSE ' ' END
FROM
( SELECT
DISTINCT
object_id ,
index_id ,
objname ,
idxname ,
idxtypedesc ,
CASE WHEN is_primary_key = 1 THEN 'prmiary key'
ELSE CASE WHEN is_unique_constraint = 1 THEN 'unique constraint'
ELSE CASE WHEN is_unique = 1 THEN 'Unique '
ELSE ''
END + idxtypedesc
END
END AS typedesc ,
STUFF(( SELECT
',' + colname + CASE WHEN is_descending_key = 1 THEN ' desc'
ELSE ''
END
FROM
idxcol
WHERE
object_id = c.object_id
AND index_id = c.index_id
ORDER BY
idxcoloder
FOR
XML PATH('') ), 1, 1, '') AS cols ,
STUFF(( SELECT
',' + colname
FROM
idxcol
WHERE
object_id = c.object_id
AND index_id = c.index_id
AND is_included_column = 1
ORDER BY
idxcoloder
FOR
XML PATH('') ), 1, 1, '') AS colsinc ,
row_count ,
[allrowpage_MB] ,
[usedrowpage_mb] ,
[allrowpage_MB] - [usedrowpage_mb] AS unusedrowpage_mb
FROM
idxcol c ) AS t
【转】SQL SERVER获取索引脚本的更多相关文章
- SQL Server获取索引创建时间&重建时间&重组时间
之前写过一篇博客"SQL Server中是否可以准确获取最后一次索引重建的时间?",里面主要讲述了三个问题:我们能否找到索引的创建时间?最后一次索引重建(Index Rebuild ...
- 公司内部培训SQL Server传统索引结构PPT分享
公司内部培训SQL Server传统索引结构PPT分享 下载地址 http://files.cnblogs.com/files/lyhabc/SQLServer%E4%BC%A0%E7%BB%9F%E ...
- 常用脚本--SQL Server获取OS日志
--=================================================== --SQL Server获取OS日志: ), ), ), ) select @start_d ...
- SQL Server获取下一个编码字符串的实现方案分割和进位
我在前一种解决方案SQL Server获取下一个编码字符实现和后一种解决方案SQL Server获取下一个编码字符实现继续重构与增强两篇博文中均提供了一种解决编码的方案,考虑良久对比以上两种方 ...
- [转]SQL SERVER整理索引碎片测试
SQL SERVER整理索引碎片测试 SQL SERVER整理索引的方法也就这么几种,而且老是自作聪明的加入智能判断很不爽,还是比DBMS_ADVISOR差远了: 1SQL SERVER 2000/2 ...
- SQL Server创建索引(转)
什么是索引 拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为4K .为了加快查找的速度,汉语字(词)典一般都有按拼音. ...
- SQL Server获取下一个编码字符实现继续重构与增强
我在SQL Server获取下一个编码字符实现的博文中,虽然实现了这个问题,但是感觉维护起来比较麻烦,例如如果调整编码字符串的固定长度,就需要变更三个函数,这样的为何成本确实比较大.面向对象编 ...
- SQL SERVER获取数据库文件信息
MS SQL SERVER 获取当前数据库文件等信息,适用于多个版本: SELECT dbf.file_id AS FileID , dbf.name AS [FileName] , s.fi ...
- 理解SQL Server中索引的概念
T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他 简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能 ...
随机推荐
- 开源的图像滤镜库----for Android
1.GPUImage for Android(推荐使用) GPUImage基于OpenGL实现的各种各样图像滤镜(图像处理)效果,多达50多种, idea源于GPUImage for iOS,基本囊括 ...
- HDU 2504 又见GCD(数论,最大公约数)
又见GCD Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- 洛谷——P1589 泥泞路
P1589 泥泞路 题目描述 暴雨过后,FJ的农场到镇上的公路上有一些泥泞路,他有若干块长度为L的木板可以铺在这些泥泞路上,问他至少需要多少块木板,才能把所有的泥泞路覆盖住. 输入输出格式 输入格式: ...
- 一种可以做app性能监控的app
http://easytest.taobao.com/?spm=0.0.0.0.ljgQHN
- bzoj 4774: 修路
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 282 Solved: 132[Submit][Status][Discuss] Descriptio ...
- 【找规律】URAL - 2069 - Hard Rock
题解及证明:http://www.cnblogs.com/StupidBoy/p/5241258.html #include<cstdio> #include<algorithm&g ...
- java读写文件及保留指定位小数
1)先上代码: public static void main(String[] args)throws IOException{ double[][] B=new double[1043][2102 ...
- git强行推送到远端
回到某一个节点git reset --hard 5db4eddeca2然后把现在这个节点,强行推送到远端git push -f origin master
- RxJava 1.x 理解-3
在 RxJava 1.x 理解-1 中,我们说到了RxJava的简单用法,但是这还远远不够,因为 输入的数据 ---> 被监听者(订阅源)对这些数据进行操作,或者执行响应的处理 --> 产 ...
- JNI之Hello World!
基本流程: 1. 创建一个类(HelloWorld.java)2. 使用 javac 编译该类3. 利用 javah -jni 产生头文件4. 用本地代码实现头文件中定义的方法5. Run 备注:在一 ...