标签归档:索引

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;
     ----将数据库表下所有索引进行重建


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

mssql sqlserver 视图上创建索引的方法分享


摘要:
下文讲述视图上创建索引的方法分享,如下所示:
实验环境:sql server 2012


下文讲述使用sql脚本对已存在的视图创建索引的方法分享,如下所示:

 CREATE  UNIQUE  CLUSTERED  INDEX  [索引名称]  ON [视图名称]


总结:
视图上新建索引的方法和表上创建索引的方法相似

mssql sqlserver 数据库索引大白话简介


摘要:
下文讲述sqlserver索引大白话简介,如下所示:


当平时遇到查询慢时,我们可以采用

改写sql脚本,表查询字段上加入索引

下文将采用简明扼要的方式讲述索引的相关说明:
在数据库引擎中,索引检索数据的方式,并非一直按照固定的顺序进行检索,而且按照目录格式快速查找到相应的数据位置,数据库索引类似一本字典,
索引类似一个目录:
例:我们查找汉字”猫”,首先查找首字母”M” ,然后跳转到M目录,然后从M字母开始顺序查找,索引就是采用这种快速定位的思路加快数据检索。
索引存在另外一个问题就是维护索引的成本相对较高,因为索引中涉及的内容非常多,会存储到数据库上的很多位置上,当我们在索引中加入汉字时,索引为了保证自身的排序,所以采用其它条目依次后移的方式,即加大索引的维护成本, 通过以上的分析,我们可以看出索引可以加快查询速度,但是降低了对数据操作的速度。
综上所述,在建立索引时,我们一定要综合考虑查询和数据更改的效率上达到一个平衡点,禁止一味的追求查询效率而忽略了插入的效率。