‘数据库’ 分类的存档
[转载]SQL调优日记之发挥SQL性能与你的写法有关--对比三种方式实现相同功能 – 谢堂文(Darren Xie) – 博客园. 今天再次改老系统,看着前边的师兄留下的SQL,就想起了MS SQL 7.5和SQL2000。可能很多人都还没有习惯新版本(05版之后)的SQL语法,还是用以前开发MS SQL2000的方式实现功能,但是多少人会明白,换一种写法后,性能却相差十倍百倍呢! 我用来做例子的是我们MES系统用到的一段简单功能T-SQL,都是使用同一个库、相同的表、相同的逻辑: 开始前先记录时间,计算完成后看用了多少时间。 我先用推荐的语法来写的方式,代码1是好的写法,由于是在我们系统的情景下描述的,看管不可照抄,只说明性能的差别。 代码1: 用WITH,把各个逻辑分开处理,再终合出最后结果,推荐! 1: declare @P INT,@T DATETIME; 2: SELECT @P=1,@T=GETDATE(); 3: ;WITH R0 — 4: AS ( 5: SELECT TOP 1 M.WPCODE,t.RID,MACNO,LEFT(WFCNO,CHARINDEX(‘-’,WFCNO)-1) WO FROM MES_WFCIO M,MES_WFCIODTL t 6: WHERE M.RID=t.RID AND WFCNO=’JSAC00334D-033-001′ 7: ORDER BY t.RID DESC 8: ) 9: ,R1 [...]
[转载]浅谈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 [...]
[转载]Sql Server参数化查询之where in和like实现详解(续) – 懒惰的肥兔 – 博客园. 在上一篇Sql Server参数化查询之where in和like实现详解中介绍了在SQL Server使用参数化查询where in的几种实现方案,遗漏了xml和表值参数,这里做一个补充 文章导读 方案5使用xml参数 方案6 使用表值参数TVP 6种实现方案总结 方案5 使用xml参数 对SQL server xml类型参数不熟悉的童鞋需要先了解下XQuery概念,这里简单提下XQuery 是用来从 XML 文档查找和提取元素及属性的语言,简单说就是用于查询xml的语言说到这就会牵着到XPath,其实XPath是XQuery的一个子集,XQuery 1.0 和 XPath 2.0 共享相同的数据模型,并支持相同的函数和运算符,XPath的方法均适用于XQuery,假如您已经学习了 XPath,那么学习 XQuery 也不会有问题。详见http://www.w3school.com.cn/xquery/xquery_intro.asp XQuery概念了解后需要进一步了解下SQL Server对xml的支持函数,主要为query()、nodes()、exist()、value()、modify() ,详见http://msdn.microsoft.com/zh-cn/library/ms190798.aspx 使用xml方式实现where in时有两种实现方式,使用value和exist,在这里推荐使用exist方法,msdn是这样描述的: D.使用 exist() 方法而不使用 value() 方法 由于性能原因,不在谓词中使用 value() 方法与关系值进行比较,而改用具有 sql:column() 的 exist()。 http://msdn.microsoft.com/zh-cn/library/ms178030.aspx 使用xml的value方法实现(不推荐) DataTable dt = new DataTable(); using (SqlConnection conn = new [...]
[转载]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,逻辑读取 [...]


