SQL SEVER数据库重建索引的方法

一.查询思路

1.想要判断数据库查询缓慢的问题,可以使用如下语句,可以列出查询语句的平均时间,总时间,所用的CPU时间等信息

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

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_offsetEND

- 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_offsetEND

- qs.statement_start_offset)/2) + 1) not like‘%fetch%‘

ORDER BY total_elapsed_time / execution_count DESC;

2.列出数据库每个表的数据量,并且需要运维人员对业务足够了解,知道大概哪些表是查询量最多的,可以查看“排在前面的表的磁盘使用情况”:

3.查看表碎片的情况,可以使用命令

DBCC SHOWCONTIG

可以看到该表扫描密度只有33.52%(最佳状态是100%,每个表页都写满数据),远远低于最佳计数,也就是说这个表的利用率很低,本来扫描一页 就能出结果,现在可能需要扫描三页,增加了查询时间;而逻辑碎片和区碎片都很多(一般认为超过30%就需要优化了),也就是说同样一页,数据很少而碎片很 多,占用了过多的数据库资源。 4.根据你对业务的了解,找出查询最多的表,对比他的数据,查询时间,和碎片程度可以判断出该表是否需要整理碎片,重建索引,以提高数据库性能。 重建索引的语句为:

use[数据库名] ALTER INDEX ALL ON [表名称] REBUILD;

重建后,同样的一张表NWME_Company_Index,再次查询表碎片情况的结果如下:

可以看到密度已经变为96.9%,而逻辑碎片几乎没有了。

5.现在可以看一下整理碎片后,是否真的对查询性能优化了,再次运行第一点列出的命令查看可以发现,大部分查询语句所用的平均时间都下降了接近一半:

现在可以到前台实际体验优化后的效果了。

时间: 2024-08-27 12:40:31

SQL SEVER数据库重建索引的方法的相关文章

sql server数据库可疑状态解决方法

前段时间客户数据服务器断电,开机后发现数据库状态标记为可疑,可能是断电引起的数据库日志文件损坏,修复方法如下: 只有mdf文件,重建日志: 1 --注:example为测试用数据库,相应的Example_log.ldf为测试用的日志文件 2 use master 3 go 4 alter database example set emergency 5 go 6 --置数据库为单用户模式 7 alter database example set single_user with rollback

sql sever数据库服务器名称问题

目的:解决数据库服务器名称未知的情况. 错误:在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: SQL 网络接口, error: 26 - 定位指定的服务器/实例时出错) 数据库连接字符串通常为:计算机名\实例名,实例名未知时打开sql sever配置管理器查看sql sever服务红圈处即为数据库的实例名称 解决方法为:打开sql sever conf

sql server数据库中索引失效的问题讨论

有关于数据库中索引失效的问题,网上也有相关的讨论.不过他们是针对oracle数据库进行讨论的.那么在sql server数据库中索引什么时候 会失效呢.总结了一下,不过我没有经过测试.没测试就没有发言权,这里仅供自己参考. 首先,所谓失效.并不真的就是这个索引被删除了.而是在这些情况下,DBMS不会检索索引列表了.执行速度和没有这个索引时的速度一样. 但是再执行另外的一条语句.同样索引可以正常起作用.所以索引的失效是针对某条sql语句的,而不是针对索引本身的.那么在哪些情况下, 确切的说是在哪类

SQL Sever数据库

1.数据.数据库.数据管理系统基本概念: 数据:人类有用信息的符号化表示. 数据库:按照数据结构来组织.存储和管理数据的一个仓库. 数据库管理系统(DBMS):可维护.存储并为应用系统提供数据的软件系统(软件+数据库+数据管理员). 可以客观描述的事物被称为"实体",不同的数据体现了不同的实体.数据每一行(Row)对应一个实体,被称为"记录(record)",每个输入项称为"列"(Column),如编号,姓名,学号等.数据"表"

如何把本机Sql Sever数据库转移到虚拟主机sql数据库

不少站长的网站都是asp+access的网站  因为操作access数据库的网站非常简单,甚至你对数据库不懂都可以 但如果是mssql数据库的网站,有些新手朋友就不知道该怎么弄了  在这里给大家做个简单的使用教程,主要是讲解怎么把我们本机的Sql sever上的数据转移到你空间服务器上sqlsever去  (当然,这里也可以转移其它虚拟主机的服务器上面的MSSQL,方法是一样的,前提是本机必须装有SQL2000)  因为论坛已经有好几个视频教程讲解的都是怎么还原和附加数据库,这里我就不再讲解这些

SQL Server数据库表索引碎片整理

在SQLServer数据库,通过DBCC ShowContig或DBCC ShowContig(表名)检查索引碎片情况,指导我们对其进行定时重建整理. 运行结果如下: 1 2 3 4 5 6 7 8 9 10 11 DBCC SHOWCONTIG 正在扫描 'tbModule' 表... 表: 'tbModule'(1845581613):索引 ID: 0,数据库 ID: 9 已执行 TABLE 级别的扫描. - 扫描页数.....................................

SQL server 数据库之“索引”详解

什么是索引?数据库中的索引与书籍中的目录类似,索引使SQL Server编排数据的内部方法,它为SQL Server提供一种方法来编排查询数据的路由. 索引页是数据中存储索引的数据页.索引页存放检索数据行的关键字页及该数据行的地址指针.通过使用索引,可以大大提高数据库的检索速度.改善数据库性能. 索引的分类1.唯一索引 唯一索引不允许两行具有相同的索引值.创建了唯一约束,将自动创建唯一索引.尽管唯一索引有助于找到信息,但是为了获得最佳性能,建议使用主键约束.2.主键索引 在数据库关系图中为表定义

sql sever 2017创建新用户方法

1.打开SQL Sever 2017配置管理工具并启用 2.打开SQL Sever 2017 Management Studio 3.用默认用户名(或用户名为"."代表本机)和windows验证方式登陆 4.安全性->用户名->右键->新建用户 5.断开,重新登陆就可以用新的用户名密码登陆了 但是大多数会发现新的用户名根本登陆不上去,会出现以下18456错误. 那是因为第一次登陆还需要更改一些地方,请大家点下面链接:https://www.cnblogs.com/ld

sql sever数据库常用的执行语句

--使用master数据库use master --创建数据库文件create database 数据库名字 on( name=, --逻辑名称 filename= .ndf, --数据文件物理路径名称 size=, --文件初始大小 maxsize= , --文件最大的大小 filegrowth= --自动增长) --创建数据库日志文件log on( name=, --逻辑名称 filename= .ldf, --日志文件物理路径名称 size=, --文件初始大小 maxsize= , --