http://blogs.msdn.com/b/apgcdsd/archive/2011/06/07/sql-server-ranking-view.aspx
微软亚太区数据库技术支持组官方博客 英文博客
微软亚太区数据库技术支持组 官方博客
Search this blog Search all blogs
最热 微软中文博客Live Now on Server & Tools Blogs Feed
免费获得Windows Server 2012专家培训,就在本月!
在几分钟内轻松地将您的LightSwitch应用程序部署到Azure网站
如何从C#桌面应用程序中调用Windows 8的WinRT API- WinRT 图表
Subscribe
Comments
Contact
Menu
Blog Home
Atom
翻译此页
Microsoft® Translator
Tags
linked server Oracle SQL Server transaction replication 内存 命令管道 性能优化 数据库引擎 死锁 游标 证书 连接
More ▼
Archives
April 2014 (2)
February 2014 (1)
October 2013 (4)
September 2013 (1)
August 2013 (1)
More ▼
巧用SQL Server(Ranking)实现view的排序功能
APGC DSD Team 6 Jun 2011 8:28 PM 0
首先,让我们来做一个简单的实验
Create view test_view
As
Select top 100 percent * from table order by ID
Create view test_view1
As
Select top 99 percent * from table order by ID
测试部分:
a. select * from test_view where id in (9,20)
b. select * from test_view1 where id in (9,20)
其中table是一个超过10000行数据的表格,其中在ID栏上已建有索引。
通过如下语句select count(distinct id) from table,返回值为9000,这个结果说明index选择性很好。
结果发现,
测试语句a:
在SQL Server 2000环境下使用索引做查找并返回排序后的结果;
而在SQL Server 2008中不进行排序,但仍然使用索引进行查找、
测试语句b:
SQL 2000 和SQL2008始终使用全表扫描,返回排序后的结果,即使它只有2行返回值。
我们先解释语句a在2000和2008上得到不同结果的原因。在SQL Server 2008中,优化器的算法做了一些修改,如果发现top 100%的情况出现,我们会自动忽略top + Order by,因为top 100%本来就是返回全表数据。在2000上是没有这个智能优化的,所以2000会严格按照语法的格式和先后顺序执行。
我们知道,在view中是没有办法使用order by子句的,除非我们加上top 关键字。但是现在top 100%又会被自动忽略,那么,如果在SQL Server2008中希望得到view排序的结果,应该怎么做呢?
这里可以分享一篇文章,关于在SQL Server2005和SQL Server2008环境下对视图强制排序
http://support.microsoft.com/default.aspx?scid=kb;en-us;926292&sd=rss&spid=2855
解决方法就是 用top 99%。
但是同时带来另一个问题,它将执行如Select top 99 percent * from table order by ID的执行计划。也就是说,SQL Server会在视图中使用的表上做全表扫描。
我们能不能找到一种高性能的得到有序返回集的方法呢?
排序参数(Ranking)虽然不是为此而设计,却能有效的解决这一问题
使用方法实例如:
Create view test_view2
SELECT * ,
RANK() OVER (PARTITION BY id ORDER BY other_column) AS RANKing
FROM table
这个写法的意思是按照ID做partition,那么自然就会按照ID做排序。
Select * from test_view2 where id in (9,20)
如此,建立的视图和查找的命令都可以使用ID栏上的索引,并依据ID对结果集排序。美中不足是,这种排序只能是基于ASC的排序。
分享到:
相关推荐
### SQL Server 2005 T-SQL增强 #### 富有表现力的数据类型 (Richer Data Types) 在SQL Server 2005中,T-SQL得到了显著增强,其中一个重要方面是引入了新的数据类型。这些数据类型更加丰富且灵活,能够更好地支持...
SQL—and unveil the power of set-based querying—with comprehensive reference and advice from a highly regarded T-SQL expert and members of Microsoft's SQL Server development team. Database developers...
通过这些策略,可以有效地改善全文检索的性能和准确性,确保在SQL Server 2005环境中实现可靠的文本搜索功能。如需更深入的了解,可参考压缩包内的"微软sql server 2005全文检索的BUG.doc"文档。
SQL Server 2019 引入了许多重要的T-SQL增强功能,这些更新极大地提高了数据库管理、查询效率和数据处理能力。以下是对这些关键增强功能的详细解释: 1. **新型大数据类型(Large-Value Data Types)**:SQL Server...
- SQL Server 2005引入了 **RANKING函数集** ,包括ROW_NUMBER()、RANK()、DENSE_RANK()等,这些函数简化了复杂查询的编写,尤其是处理排序和分组操作时。ROW_NUMBER()尤其受到欢迎,因为它避免了使用临时表来生成...
在实际应用中,这个Java实现的分层排序系统可能还会涉及性能优化,如使用并发处理大量数据,或者利用数据结构(如堆、优先队列)来加速排序过程。此外,为了适应不同的业务场景,系统可能还需要支持动态调整排序策略...
在SQL Server中,表达式(expression)是构建查询和更新语句的基础部分,它用于计算单个数据值。本文将深入探讨SQL Server表达式的概念、语法、参数、结果以及相关注意事项。 ## 1. 表达式的类型与构成 SQL Server中...
总的来说,2013年CVPR上的这篇论文以及附带的代码资源,为计算机视觉领域的研究者提供了一个有力的工具,用于理解和实现基于流形排序的显著性检测。通过对这一算法的学习和实践,我们可以更好地理解图像的内在结构,...
NELL995_data 是NELL995的works_for关系数据集。 DFS.py 深度优先遍历获取基础路经,path_dfs_all.txt 是结果;path_dfs.txt 是部分结果;path_threshold.txt是加了限制后的结果 model.py 获取实体路经三元组的...
jstarcraft-rns排序预测(Ranking)和评分预测(Rating). 为相关领域的研发人员提供完整的通用设计与参考实现. 涵盖了70多种排序预测与评分预测算法,是最快最全的Java推荐与搜索引擎
例如,Ranking SVM、RankBoost、RankNet 和 ListMLE 是常用的学习排序方法。这些方法使用的损失函数是排名指标(基于NDCG和MAP)的上限。这意味着通过最小化损失函数,可以最大化排名指标,从而达到提高排序性能的...
### Path Ranking 算法详解 #### 知识图谱推理基础 在深入探讨Path Ranking算法之前,我们先简要回顾一下知识图谱的基本概念及其重要性。 **知识表示**是指将现实世界中的各类知识表达成计算机可以存储和计算的...
本文献探讨了将学习排序方法应用于文档检索领域,特别是针对Ranking SVM(一种典型的学习排序方法)进行了适应性改进。作者指出,在将Ranking SVM或任何其他学习排序方法应用于文档检索时,必须考虑两个重要因素:...
以上是对 SQL Server 中常用数据类型、函数、以及创建存储过程、触发器、视图、索引等基本操作的详细介绍。这些内容可以帮助开发人员更高效地管理和操作数据库,同时也能帮助维护数据库的安全性和性能。对于初学者来...
总结起来,这个"ranking.zip"压缩包提供了一个仿微信运动排行榜的小程序实例,通过`main.js`处理业务逻辑,`main.json`配置应用行为,`main.wxml`构建页面结构,`main.wxss`设计界面样式,共同实现了功能完整、用户...
JDBC允许Java程序与各种类型的数据库进行交互,如MySQL、Oracle或SQL Server。在学生排名系统中,开发者会创建相应的数据库表结构,如学生表(包括学生ID、姓名、课程等字段)、课程表和成绩表。通过JDBC,系统能够...
使用 Eclipse IDE 和 MS SQL Server 关系数据库的 Java 排名系统 故事 – 基础 – N 项排序 – 管理设置 作为一个企业,我想定义一个系统,让人们可以直接比较 N 个项目,每组 2 个并存储他们的回答,以便我可以分析...