标签归档:索引

mssql sqlserver查看索引大小的3种方法分享


摘要:
下文讲述sqlserver中查看索引大小的三种方法,如下所示:
实验环境:sql server 2008 R2


实现思路:
1.使用系统存储过程“sp_spaceused”查看
2.通过查看系统视图 sys.indexes 获取索引大小

    /*
查看数据表 adminset 
下的索引信息
*/
sp_spaceused 'adminset'

SELECT
  i.name                  AS [索引名称],
  SUM(s.used_page_count) * 8   AS [索引大小KB]
FROM sys.dm_db_partition_stats  AS s 
JOIN sys.indexes                AS i
ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
WHERE s.[object_id] = object_id('adminset') 
GROUP BY i.name
ORDER BY i.name

SELECT
    i.name              AS [索引名称],
    SUM(page_count * 8) AS [索引大小KB]
FROM sys.dm_db_index_physical_stats(
    db_id(), object_id('adminset'), NULL, NULL, 'DETAILED') AS s
JOIN sys.indexes AS i
ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
GROUP BY i.name
ORDER BY i.name

mssql_sqlserver_获取数据库上索引大小的三种方法

mssql_sqlserver_获取数据库上索引大小的三种方法



注意事项:
 查看整个数据库中的索引大小
1. sp_spaceused 函数后面不输入表名
2.将sys.dm_db_index_physical_stats中的object_id(‘adminset’)替换为NULL
  3.WHERE s.[object_id] = object_id(‘adminset’) 查询条件禁用

相关阅读:
sp_spaceused关键字使用
mssql sqlserver 系统表sys.indexes简介说明
sql server动态存储过程 sys.dm_db_index_physical_stats 功能简介
sqlserver 查询当前数据库下所有表的占用空间的方法分享

如何使用“sql脚本”禁用表索引呢?


摘要:
下文通过举例的方式讲述sqlserver中禁用索引约束的方法,如下所示:
实验环境:sql server 2018R2

--操作步骤如下:
  --1.打开SSMS并连接到相应的数据库引擎上
  
  --2.连接到相应的数据库上
     use [数据库名称]

  --禁用单条索引的脚本
  ALTER INDEX [索引名称] ON [数据表名称] 
    DISABLE;  
  --禁用整张表索引的脚本  
   ALTER INDEX ALL ON [数据表名称]   
     DISABLE;   

相关阅读:
使用sql脚本禁用索引详细举例
sqlserver 启用索引的方法
在SQL Server 2005和SQL Server 2008禁用和启用索引的方法

mssql sqlserver 如何重新数据库索引呢?


下文通过举例的方式讲述使用sql脚本重建数据库索引的方法分享,如下所示:
实验环境:sql server 2008 R2



一、使用sql脚本检索出消耗CPU时间最多的sql脚本,然后查阅此sql脚本所对应的数据表的索引情况

 SELECT creation_time N'脚本编译耗时'
,last_execution_time N'脚本上次执行时间'
,total_physical_reads N'脚本物理读取总次数'
,total_logical_reads/execution_count N'脚本每次逻辑读次数'
,total_logical_reads N'脚本逻辑读取总次数'
,total_logical_writes N'脚本逻辑写入总次数'
, execution_count N'脚本执行总次数'
, total_worker_time/1000 N'脚本所用的CPU总时间ms'
, total_elapsed_time/1000 N'脚本总花费时间ms'
, (total_elapsed_time / execution_count)/1000 N'脚本平均执行耗时ms'
,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/2) + 1) N'脚本语句内容'
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
where SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/2) + 1) not like'%fetch%'
ORDER BY total_elapsed_time / execution_count DESC;


二、获取指定表的索引碎片情况

    DBCC SHOWCONTIG ('数据表名称')


三、重建数据表索引

   use   [databaseName]  
    
     ALTER INDEX ALL ON [数据表名称] REBUILD;
     ----将数据库表下所有索引进行重建


重建数据库索引的工作,一定要放在非高峰期时间,因为数据库索引重建会锁表