SQL Server 2005比2000的几个新特性

1:使用分区表来提高数据库性能

  以前的处理大数据量时很多人会采取使用多个结构相同的表按时间段来分,不同时间的数据存在不同的数据表里,这样如果只查询一个表的数据就很快,如果需要跨表查询则再通过连接视图将这些表连起来伪装成一个表的样子,这样可以提高查询效率,但牺牲了程序设计的优雅性和数据库设计的简单性,特别是在处理关系、约束、数据完整性时会非常的繁琐复杂。

  升级到sql2005可以采用分区表(partition table)来处理这种需求,我们可以将我们的分区规则写成分区函数,然后我们的分区表就可以按照这个分区函数来将我们的表存储在不同的存储介质上,当我们查询时SQL Server最优化程序会自动选择分区做Join这样当然要比大数量过滤起来有效的多。

  2:通过Row_Number来给查询结果集加个序号

  查询结果集没有序号郁闷的问题相信折腾了不少人,每每有客户指着我的Grid OR Report对我说“小莫,你能不能给这个地方加个序号?”对于这样的合理要求只能说是,然后就将查询来的结果手动的加个序号,对牺牲的性能也只好烧把高香祝福它能升上天堂,然后就是保佑着客户查询数据量不要太大。

  升级到SQL2005 我可以将序号这个功能默认给用户不要他再给我提这样的合理要求了。

 

其中帮助文档中的一个例子:

以下示例将返回行号为 50 到 60(含)的行,并以 OrderDate 排序。

 
USE AdventureWorks;
GO


WITH OrderedOrders AS
(SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (order by OrderDate)as RowNumber
FROM Sales.SalesOrderHeader )


SELECT *
FROM OrderedOrders
WHERE RowNumber between 50 and 60;

 

  3:交叉表恶梦的结束

  如果你做过考勤管理,选择建31个列还是添加31行?选择31列直观,但你查询的时候你也许更喜欢你头撞墙而不是来查询,添加31行当你决定用列显示日期的时候你发现你还是愿意撞墙。还有当你做类似学生成绩管理系统的时候你要将课程表中的课程数据做列学生表中的学生作行的时候这个时候你突然醒悟还是撞墙好些。

  升级到SQL Server2005你可以用Pivot这个单词的意思就是“枢轴”有了轴你可以将行扭成列还可将列扭成行(UNPivot)

其中帮助文档中的一个例子:

以下示例返回按员工 ID(164、198、223、231 和 233)下达,并按供应商 ID 分类的采购订单的数量。


USE AdventureWorks
GO
SELECT VendorID, [164] AS Emp1, [198] AS Emp2, [223] AS Emp3, [231] AS Emp4, [233] AS Emp5
FROM
(SELECT PurchaseOrderID, EmployeeID, VendorID
FROM Purchasing.PurchaseOrderHeader) p
PIVOT
(
COUNT (PurchaseOrderID)
FOR EmployeeID IN
( [164], [198], [223], [231], [233] )
) AS pvt
ORDER BY VendorID;
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值