日期:2013-02-01 浏览次数:20480 次
1:使用分区表来提高数据库功用
以前的处理大数据量时很多人会采取使用多个结构相反的表按时间段来分,不同时间的数据存在不同的数据表里,这样如果只查询一个表的数据就很快,如果需求跨表查询则再通过连接视图将这些表连起来伪装成一个表的样子,这样可以提高查询效率,但牺牲了程序设计的优雅性和数据库设计的简单性,特别是在处理关系、约束、数据完整性时会非常的繁琐复杂。
升级到sql2005可以采用分区表(partition table)来处理这种需求,我们可以将我们的分区规则写成分区函数,然后我们的分区表就可以按照这个分区函数来将我们的表存储在不同的存储介质上,当我们查询时SQL Server最优化程序会自动选择分区做Join这样当然要比大数量过滤起来无效的多。
2:通过Row_Number来给查询结果集加个序号
查询结果集没有序号郁闷的问题置信折腾了不少人,每每有客户指着我的Grid OR Report对我说“小莫,你能不能给这个地方加个序号?”对于这样的合理要求只能说是,然后就将查询来的结果手动的加个序号,对牺牲的功用也只好烧把高香祝愿它能升上天堂,然后就是保佑着客户查询数据量不要太大。
升级到SQL2005 我可以将序号这个功用默认给用户不要他再给我提这样的合理要求了。
3:交叉表恶梦的结束
如果你做过考勤管理,选择建31个列还是添加31行?选择31列直观,但你查询的时候你也许更喜欢你头撞墙而不是来查询,添加31行当你决定用列显示日期的时候你发现你还是情愿撞墙。还有当你做类似先生成绩管理系统的时候你要将课程表中的课程数据做列先生表中的先生作行的时候这个时候你突然醒悟还是撞墙好些。
升级到SQL Server2005你可以用Pivot这个单词的意思就是“枢轴”有了轴你可以将行扭成列还可将列扭成行(UNPivot)