一.查询思路
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.现在可以看一下整理碎片后,是否真的对查询性能优化了,再次运行第一点列出的命令查看可以发现,大部分查询语句所用的平均时间都下降了接近一半:
现在可以到前台实际体验优化后的效果了。
如果不需要打开shell执行create index,直接在程序源代码里就能指定数据库索引,是不是很酷? 是的,利用bugu-mongo,你只需在程序里加上个@EnsureIndex注解,即可实现该功能。 以一个简单的新闻系统为例: @Entity @EnsureIndex("{type:1}") public class News implements BuguEntity{ @Id
本文向大家介绍MongoDB中重建索引的方法,包括了MongoDB中重建索引的方法的使用技巧和注意事项,需要的朋友参考一下 要重新构建索引,请使用reIndex()。让我们首先创建一个索引。查询如下 这将产生以下输出: 以下是在MongoDB中重建索引的查询- 这将产生以下输出-
推荐: http://tech.meituan.com/mysql-index.html MySQL索引背后的数据结构及算法原理 聚集索引,非聚集索引,B-Tree,B+Tree,最左前缀原理
我在MySQL中有一个表,它有一个主键列。 有什么建议吗??也许是一个询问..:)
通过Daos.migration实现表结构自动修改 在MainSetup.init方法内, Daos.createTableInPackage之后添加: Daos.migration(dao, User.class, true, false, false);
数据库创建索引能够大大提高系统的性能。 第一,通过创建唯一性的索引,可以保证数据库表中每一行数据的唯一性。 第二,可以大大加快数据的检索速度,这也使创建索引的最主要的原因。 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 第四,在使用分组和排序子句进行数据检索时,同样可以显著的减少查询中查询中分组和排序的时间。 第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,