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

一.查询思路

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

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

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数据库
, sqlsever
重建索引
mssql重建索引、mssql重建所有索引、数据库重建索引、sql数据库重建索引、oracle数据库重建索引,以便于您获取更多的相关知识。

时间: 2024-09-20 06:33:19

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

导入Excel电子表格数据到SQL Sever数据库的另一种方法

excel|电子表格|数据|数据库 上次给大家提供了一个从Excel电子表格导入到SQL Server数据库的方法,前提条件是机器上要装有Office 里的Excel组件.今天再为大家提供另一种方法:不需要安装Excel也可以导入到我们的SQL Server数据库.首先用SQL Server自身的数据转换功能把Excel导入到 SQL Server中,下面的示例中导入后的表名为:Sheet1$,然后我们再从这个库中把数据导入到我们自己的系统的数据表中.(这样一来就是2个SQL Server表中的

ado-VC++6.0 MFC通过ADO连接sql sever数据库

问题描述 VC++6.0 MFC通过ADO连接sql sever数据库 我现在是准备做一个登录界面,用户名称和密码都保存在数据库中. CString logIn="select acc_user,acc_passwd from accounts where acc_user = '"+m_edit_userName+"' and acc_passwd = '"+m_edit_passWord+"'"; m_adodc_logIn.SetRecor

代码-ASP.NET登陆页面时如何查询SQL Sever数据库中用户名和密码是否相匹配

问题描述 ASP.NET登陆页面时如何查询SQL Sever数据库中用户名和密码是否相匹配 小弟是个新手,想请教下ASP.NET中如何通过TextBox控件去查询SQL Sever数据库中用户名和密码是否相匹配.求完整的代码,谢谢各位前辈! 解决方案 string connect = ""Provider=Microsoft.Jet.OleDb.4.0;Data Source=|DataDirectory|contacts.mdb"";string query =

Odbc连SQL Server数据库的几种方法

odbc|server|数据|数据库 Odbc连SQL Server数据库的几种方法   这篇文章是针对在CSDN论坛 中的一些想知道这方面技术的网友而写的.因为最近我本人在论坛上看到很多网友提到这个问题,所以就写了这篇文章,以飨读者. SQL Server 是一种高效的关系数据库系统,它与Windows NT/2000及Windows 9x等操作系统紧密集成.也是今天市场上几种大型关系型数据库(SQL Server\Oracle ybase等)之一.对于今天复杂的B/S服务器系统来说,SQL

导入Excel电子表格数据到SQL Sever数据库

excel|电子表格|数据|数据库 <%'On Error Resume Next'导入Excel电子表格数据到SQL Sever数据库 By Dicky 2004-12-27 16:41:12 QQ:25941Function Open_Conn(SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName,SqlConn)'创建数据库连接对象并打开数据库连接 Dim ConnStr 'SQL Server数据库连接参数:数据库名.用户密码.用户名.

怎么做这个界面,要求可以连接sql sever数据库取数据显示在Data grid上面

问题描述 怎么做这个界面,要求可以连接sql sever数据库取数据显示在Data grid上面 5C 能不能给点相关的代码提示 解决方案 界面就这么画好了.在服务器上用webapi或者asp.net mvc做一个程序,访问数据库,以json或者xml返回数据.silverlight程序通过httpwebrequest访问你的服务器网页,得到数据,放入界面.

在Oracle数据库中按用户名重建索引的方法

如果你管理的Oracle数据库下某些应用项目有大量的修改删除操作, 数据索引是需要周期性的重建的. 它不仅可以提高查询性能, 还能增加索引表空间空闲空间大小. 在ORACLE里大量删除记录后, 表和索引里占用的数据块空间并没有释放. 重建索引可以释放已删除记录索引占用的数据块空间. 转移数据, 重命名的方法可以重新组织表里的数据. 下面是可以按ORACLE用户名生成重建索引的SQL脚本: SET ECHO OFF; SET FEEDBACK OFF; SET VERIFY OFF; SET PA

SQL SERVER 2008 R2 重建索引的方法_mssql2008

参考sys.dm_db_index_physical_stats 检查索引碎片情况 1.SELECT 2.OBJECT_NAME(object_id) as objectname, 3.object_id AS objectid, 4.index_id AS indexid, 5.partition_number AS partitionnum, 6.avg_fragmentation_in_percent AS fra 7.FROM sys.dm_db_index_physical_stats

有关数据库SQL递归查询在不同数据库中的实现方法_MsSql

本文给大家介绍有关数据库SQL递归查询在不同数据库中的实现方法,具体内容请看下文. 比如表结构数据如下: Table:Tree ID Name ParentId 1 一级  0 2  二级 1 3  三级 2 4 四级 3 SQL SERVER 2005查询方法: //上查 with tmpTree as ( select * from Tree where Id=2 union all select p.* from tmpTree inner join Tree p on p.Id=tmpT