摘要: 要知道线程等待时间是制约SQL Server效率的重要原因,这一个随笔中将学习怎样收集SQL Server中的线程等待时间,类型等信息,这些信息是进行数据库优化的依据。 sys.dm_os_wait_stats这是一个系统视图,里面存储线程所遇到的所有的等待信息,具体的列如下表列名数据类型说明Wait_typeNvarchar(60)等待类型名称waiting_tasks_countBigint等待类型的等待数。该计数器在每开始一个等待时便会增加。Wait_time_msBigint该等待类型的总等待时间。Max_wait_time_msBigint该等待类型的最长等待时间。Signal_w. 阅读全文
posted @ 2014-01-14 18:54 gejianhua 阅读(363) 评论(0) 推荐(0)
摘要: 今天对分页语句做一个简单的总结,他们大同小异的,只要理解其中一个其他的就很好理解了。 使用top选项selecttop10*fromOrdersawherea.orderidnotin(selecttop10orderidfromOrdersorderbyorderid)orderbya.orderid 使用max函数这种方法的前提是有唯一值的一个列。selecttop10*fromOrders awherea.orderid>(selectMAX(orderid)from(selecttop10orderidfromOrdersorderbyorderid)asorderid)orde 阅读全文
posted @ 2014-01-14 18:53 gejianhua 阅读(501) 评论(0) 推荐(0)
摘要: 在开发过程中会遇到需要弄清楚这个数据库什么时候建的,这个数据库中有多少表,这个存储过程长的什么样子等等信息,今天把自己工作过程中经常用到的一些数据库引擎存储过程,系统视图等等总结一下以备不时之用。下面的知识多是自己总结,有一些参考了MSDN。 sp_help有时候想尽快查出数据库对象的相关信息,这个存储过程就很有用了。使用它可以查询出整个数据库中所有对象的相关信息。直接运行sp_help结果如下图1,上面是数据库对象,包含系统自定义的表,视图等等,下面是自定义数据类型图1如果我只想找到某一中数据类型的长度,精度等信息可以运行sp_help datatypename,如下图2图2如果我想找出某. 阅读全文
posted @ 2014-01-14 18:52 gejianhua 阅读(348) 评论(0) 推荐(0)
摘要: 今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起。后来在technet上搜索发现别有洞天,原来是另外一个sql关键字,t-sql的语法还是相当地丰富的。本篇是一篇学习笔记,没有什么新意,这里给出technet上的地址连接供大家参考权威:http://technet.microsoft.com/zh-cn/library/bb510625.aspx,这里具体的语法不去深究了,只是把几个例子实际运行,剖析一番。 使用merge同时执行insert和update操作我们经常会有这样的需求,根据某个字段或多个字段查找表中的一行或多行数. 阅读全文
posted @ 2014-01-14 18:47 gejianhua 阅读(376) 评论(0) 推荐(0)
摘要: 透视今天抽一点时间来看看透视和逆透视语句,简单的说就是行列转换。假设一个销售表中存放着产品号,产品折扣,产品价格三个列,每一种产品号可能有多种折扣,每一种折扣只对应一个产品价格。下面贴出建表语句和插入数据语句。 1 create table SalesOrderDetail( 2 ProductID int /*unique多谢wuu00的提醒*/, 3 UnitPriceDiscount float, 4 ProductPrice float 5 ) 6 insert into SalesOrderDetail values 7 (711,.00,12), 8 (711,.00,13), 9 阅读全文
posted @ 2014-01-14 18:45 gejianhua 阅读(563) 评论(0) 推荐(0)
摘要: SQL语句是一种集合操作,就是批量操作,它的速度要比其他的语言快,所以在设计的时候很多的逻辑都会放在sql语句或者存储过程中来实现,这个是一种设计思想。但是今天我们来讨论另外一个话题。Sql页提供了丰富的函数供我们使用,还有很多操作有意想不到的结果,今天这个随笔来看看一些不常见到的sql语句。这些语句不像普通的增删查那样平白,它的奇妙之处有时候让人另眼相看。 1.假设我想把Person.Contact表中所有人的名字用逗号连接起来,串成一个字符串,可能会想到使用游标把FirstName查出来然后逐行赋值给一个字符串变量,可是使用游标的代价是很大的。看看下面的代码:declare @names. 阅读全文
posted @ 2014-01-14 18:44 gejianhua 阅读(377) 评论(0) 推荐(0)
摘要: 经常听说SQL Server最难的部分是性能优化,不禁让人感到优化这个工作很神秘,这种事情只有高手才能做。很早的时候我在网上看到一位高手写的博客,介绍了SQL优化的问题,从这些内容来看,优化并不都是一些很复杂的问题,掌握了基本的知识之后也可以尝试优化自己的SQL程序,甚至是其他相关的程序。优化是一些工作积累之后的经验总结和代码意识,只要平时注意积累,你也可以做优化的工作。这一篇随笔是转载,不过我强烈推荐给所有对数据库优化有兴趣的博友,读了这一篇之后下一次别人谈论优化的时候我们这些小菜就可以跟别人侃侃而谈了,不至于面面相觑,不知所措。首先给出地址:http://blog.csdn.net/hai 阅读全文
posted @ 2014-01-14 18:36 gejianhua 阅读(253) 评论(0) 推荐(0)
摘要: CPU使用率过高的常见原因 查询优化器会尽量从CPU,IO和内存资源成本最小的角度,找到最高效的数据访问方式。如果没有正确的索引,或者写的语句本身就会忽略索引, 又或者不准确的统计信息等情况下,查询计划可能不是最优的。 有些查询计划可能对只对某种条件下的查询是高效,而不是所有条件下都是。缺失索引 索引的缺失,会导致查询处理的行数大大超出必要的行数,从而加重CPU和IO的负载。简单的例子:SELECT per .FirstName , per.LastName , p.Name , p.ProductNumber , Orde... 阅读全文
posted @ 2014-01-14 00:01 gejianhua 阅读(442) 评论(0) 推荐(0)