文章标签 ‘数据库’
[转载]浅谈SQL Server中统计对于查询的影响 – CareySon – 博客园. 简介 SQL Server查询分析器是基于开销的。通常来讲,查询分析器会根据谓词来确定该如何选择高效的查询路线,比如该选择哪个索引。而每次查询分析器寻找路径 时,并不会每一次都去统计索引中包含的行数,值的范围等,而是根据一定条件创建和更新这些信息后保存到数据库中,这也就是所谓的统计信息。 如何查看统计信息 查看SQL Server的统计信息非常简单,使用如下指令: DBCC SHOW_STATISTICS(‘表名’,’索引名’) 所得到的结果如图1所示。 图1.统计信息 统计信息如何影响查询 下面我们通过一个简单的例子来看统计信息是如何影响查询分析器。我建立一个测试表,有两个INT值的列,其中id为自增,ref上建立非聚集索引,插入100条数据,从1到100,再插入9900条等于100的数据。图1中的统计信息就是示例数据的统计信息。 此时,我where后使用ref值作为查询条件,但是给定不同的值,我们可以看出根据统计信息,查询分析器做出了不同的选择,如图2所示。 图2.根据不同的谓词,查询优化器做了不同的选择 其实,对于查询分析器来说,柱状图对于直接可以确定的谓词非常管用,这些谓词比如: where date = getdate() where id= 12345 where monthly_sales < 10000 / 12 where name like “Careyson” + “%” 但是对于比如 where price = @vari where total_sales > (select sum(qty) from sales) where a.id [...]
[转载]SQLServerDBA十大必备工具—让生活轻松点 – 飞洋过海 – 博客园. 曾经和一些DBA和数据库开发人员交流时,问他们都用过一些什么样的DB方面的工具,大部分人除了SSMS和Profile之外,基本就没有使用过其他工具了; 诚然,SSMS和Profile足够强大,工作的大部分内容都能通过它们搞定,但是MS、第三方公司甚至是个人开发者为SQLServer提供了很多其他的工具,如果你 能充分的掌握这些工具,无疑会给我们数据库的管理、优化、测试和排错节省大量的时间和精力,下面就来介绍除SSMS和Profile之外的其他有用的工具。 NO1: PD(PowerDesigner) 功能:SysBase公司提供的数据库设计工具,功能很强大,是做数据库设计时必备的工具; 下载:http://www.3ddown.com/soft/14524.htm NO2: Log Explorer 功能:数据库日志读取工具,主要用来恢复误操作的数据(目前只支持到2005版本),详见: http://blog.csdn.net/jinjazz/archive/2008/05/19/2459692.aspx ; 下载地址:http://www.pc6.com/softview/SoftView_57657.html NO3:Tuning Advisor 功能:优化顾问,会根据数据库的运行情况,提示您做相关的优化(可靠性不是太高,需要自行判断); 下载:SQLServer自带 NO4:SSMSTools 功能:SSMS工具的一个插件,能提供格式化代码、追溯历史等功能(通过它,也许你可以开发自己的插件); 下载: http://www.ssmstoolspack.com/ NO5: DBDiff 功能:比较两个数据库的差异; 下载:http://opendbiff.codeplex.com/ NO6:PAL Tool 功能:Performance Analysis of Logs,Perfmon日志分析工具; 下载:http://pal.codeplex.com/ NO7:RML 功能:这个工具非常强大,下图展示了完成安装后它的四个主要功能组件;ReadTrace工具能读取数据库的Profile跟踪文件,并生成报告;Ostress能将ReadTrace 生成的文件重播,而且还可以对数据库做压力测试;ORCA能保证重报时,按照事件发生的顺序播放;Reporter能将ReadTrace后的内容通过报表的形式展现,相当 的有用。 下载:http://support.microsoft.com/kb/944837 NO8:SQLNexus 功能:先通过SQLServer自带的SQLdiag.exe工具收集信息,然后再用SqlNexus分析这些信息,它是前面一些工具的整合,为数据库管理人员寻找SQLServer服务器 的性能瓶颈和排查故障提供了相当强大的支持(MS工程师很多都用这个哦,买技术支持的朋友们有木有经历过MS要求你开启SQLDiag,然后将收集的数据回传给他们 的;现场支持时,是不是也开启SQLDiag收集数据,然后就出来了服务器性能报告,有木有;所以掌握它,1k/时的定期服务器检查技术支持费用可以省了); [...]
[转载]SQL 临时表和表变量 – yxbsmx – 博客园. 通常情况下,表变量中的数据比较少的时候,表变量是存在于内存中的。但当表变量保留的数据较多时,内存中容纳不下,那么它必须在磁盘上有一个位置来存储数据。与临时表类似,表变量是在 tempdb 数据库中创建的。如果有足够的内存,则表变量和临时表都在内存(数据缓存)中创建和处理。 说明: 1) CPU– 事件(SQL语句)使用的 CPU 时间(毫秒)。 2) Reads–由服务器代表事件读取逻辑磁盘的次数。这些读取操作数包含在语句执行期间读取表和缓冲区的次数。 3) Writes–由服务器代表事件写入物理磁盘的次数。 示例1.变量表 1) 10000条记录 declare @t table ( id nvarchar(50), supno nvarchar(50), eta datetime ) insert @t select top 10000 ID,supno,eta from 表 –cpu :125 reads :13868 writes: 147 –表 ‘#286302EC’。扫描计数 0,逻辑读取 [...]
[转载]支持定位当前页,自定义排序的分页SQL(拒绝动态SQL) – 牟向阳 – 博客园. 1,场景:根据学生编号查询,返回该学生所在班级的所有学生。支持分页、自定义排序及结果集自动定位到查询条件的学生编号所在页。 CREATE PROC [dbo].[Sp_testpagerandsorting] (@GroupID INT, @CurrentId INT, @TimeFrom DATETIME, @TimeTo DATETIME, @OrderBy CHAR(50), @PageSize INT, @CurrentPage INT) AS SET nocount ON BEGIN DECLARE @StartNumber INT, @EndNumber INT, @CurrentIdRowNumber INT, @RecordCount INT, @EndPageIndex INT DECLARE @RowNumberTable TABLE ( rownumber INT IDENTITY (1, 1), id INT ) –step 1: Build sort [...]
[转载]SQL Server 2005/2008/2012中应用分布式分区视图 – 邀月 – 博客园. 自2000版本起,SQL Server企业版中引入分布式分区视图,允许你为分布在不同的SQL 实例的两个或多个水平分区表创建视图。 简要步骤如下:根据Check约束中定义的一组值把大表分割成更小的一些表。Check约束确保每个小表保存着不能保存在其他表的唯一数据。然后使用Union All创建分布式分区视图,把所有这些小表联结成单独的结果集。 这样对性能的改善是有益的,例如,如果视图根据日期分区,并用查询来返回仅保存在一个分区表中的行,那么SQL Server会智能地只搜索一个分区而不是分布式分区视图中的所有表。 我们假设一个场景,某公司成立上海和北京分公司,分别有各自的SQL Server实例来保存网站数据,都希望用一个表跟踪网站点击。点击量非常大。此时,需要一个视图以在单个视图中引用各自的表。公司希望能查询任意一个服 务器,并且返回相同的数据或各自分公司的数据。 下面我们通过实例来演示这个场景的具体应用。假定有两个实例:AP4\NET2012和AP4\NET2013(本文所有示例均在SQL Server 2008环境下通过)。 一、创建链接服务器,当然也可以通过OpenRowset(http://msdn.microsoft.com/zh-cn/library/ms190312.aspx)而不创建链接服务器,并创建测试数据库和表。 /********* 创建一个分布式分区视图 ***************/ /********* 3w@live.cn 邀月 ***************/ USE master GO EXEC sp_addlinkedserver ‘AP4\NET2013′, N’SQL Server’ GO — 跳过远程实例架构表的检查,以提升性能,邀月注 EXEC sp_serveroption ‘AP4\NET2013′, ‘lazy schema validation’, ‘true’ GO –创建测试数据库 IF NOT EXISTS (SELECT name FROM sys.databases [...]


