`
pengzhaocheng16
  • 浏览: 180691 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

巧用SQL Server(Ranking)实现view的排序功能

 
阅读更多
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增强

    ### SQL Server 2005 T-SQL增强 #### 富有表现力的数据类型 (Richer Data Types) 在SQL Server 2005中,T-SQL得到了显著增强,其中一个重要方面是引入了新的数据类型。这些数据类型更加丰富且灵活,能够更好地支持...

    Inside Microsoft SQL Server 2008 T-SQL Querying

    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全文检索的BUG解决方案

    通过这些策略,可以有效地改善全文检索的性能和准确性,确保在SQL Server 2005环境中实现可靠的文本搜索功能。如需更深入的了解,可参考压缩包内的"微软sql server 2005全文检索的BUG.doc"文档。

    SQLServer2019中的十个最重要的T-SQL增强功能-图文.pptx

    SQL Server 2019 引入了许多重要的T-SQL增强功能,这些更新极大地提高了数据库管理、查询效率和数据处理能力。以下是对这些关键增强功能的详细解释: 1. **新型大数据类型(Large-Value Data Types)**:SQL Server...

    SQL_Server_2000与2005的比较

    - SQL Server 2005引入了 **RANKING函数集** ,包括ROW_NUMBER()、RANK()、DENSE_RANK()等,这些函数简化了复杂查询的编写,尤其是处理排序和分组操作时。ROW_NUMBER()尤其受到欢迎,因为它避免了使用临时表来生成...

    分层排序系统(基于Inventor-Ranking的发明人排序算法)-java版

    在实际应用中,这个Java实现的分层排序系统可能还会涉及性能优化,如使用并发处理大量数据,或者利用数据结构(如堆、优先队列)来加速排序过程。此外,为了适应不同的业务场景,系统可能还需要支持动态调整排序策略...

    详解SqlServer 表达式(expression)

    在SQL Server中,表达式(expression)是构建查询和更新语句的基础部分,它用于计算单个数据值。本文将深入探讨SQL Server表达式的概念、语法、参数、结果以及相关注意事项。 ## 1. 表达式的类型与构成 SQL Server中...

    2013CVPR mmanifold ranking 流形排序算法

    总的来说,2013年CVPR上的这篇论文以及附带的代码资源,为计算机视觉领域的研究者提供了一个有力的工具,用于理解和实现基于流形排序的显著性检测。通过对这一算法的学习和实践,我们可以更好地理解图像的内在结构,...

    python实现 路径排序算法_python_代码_下载

    NELL995_data 是NELL995的works_for关系数据集。 DFS.py 深度优先遍历获取基础路经,path_dfs_all.txt 是结果;path_dfs.txt 是部分结果;path_threshold.txt是加了限制后的结果 model.py 获取实体路经三元组的...

    jstarcraft-rns排序预测(Ranking)和评分预测(Rating)

    jstarcraft-rns排序预测(Ranking)和评分预测(Rating). 为相关领域的研发人员提供完整的通用设计与参考实现. 涵盖了70多种排序预测与评分预测算法,是最快最全的Java推荐与搜索引擎

    排序算法的评估指标ranking-measures-and-loss-functions-in-learning-to-rank

    例如,Ranking SVM、RankBoost、RankNet 和 ListMLE 是常用的学习排序方法。这些方法使用的损失函数是排名指标(基于NDCG和MAP)的上限。这意味着通过最小化损失函数,可以最大化排名指标,从而达到提高排序性能的...

    path ranking 算法详解

    ### Path Ranking 算法详解 #### 知识图谱推理基础 在深入探讨Path Ranking算法之前,我们先简要回顾一下知识图谱的基本概念及其重要性。 **知识表示**是指将现实世界中的各类知识表达成计算机可以存储和计算的...

    Adapting Ranking SVM to Document Retrieval RankSVM

    本文献探讨了将学习排序方法应用于文档检索领域,特别是针对Ranking SVM(一种典型的学习排序方法)进行了适应性改进。作者指出,在将Ranking SVM或任何其他学习排序方法应用于文档检索时,必须考虑两个重要因素:...

    sql_server_cheat_sheet

    以上是对 SQL Server 中常用数据类型、函数、以及创建存储过程、触发器、视图、索引等基本操作的详细介绍。这些内容可以帮助开发人员更高效地管理和操作数据库,同时也能帮助维护数据库的安全性和性能。对于初学者来...

    ranking.zip

    总结起来,这个"ranking.zip"压缩包提供了一个仿微信运动排行榜的小程序实例,通过`main.js`处理业务逻辑,`main.json`配置应用行为,`main.wxml`构建页面结构,`main.wxss`设计界面样式,共同实现了功能完整、用户...

    student-ranking-system.zip_条件查询

    JDBC允许Java程序与各种类型的数据库进行交互,如MySQL、Oracle或SQL Server。在学生排名系统中,开发者会创建相应的数据库表结构,如学生表(包括学生ID、姓名、课程等字段)、课程表和成绩表。通过JDBC,系统能够...

    Ranking-System-Demo:使用 Eclipse IDE 和 MS SQL Server 关系数据库的 Java 排名系统

    使用 Eclipse IDE 和 MS SQL Server 关系数据库的 Java 排名系统 故事 – 基础 – N 项排序 – 管理设置 作为一个企业,我想定义一个系统,让人们可以直接比较 N 个项目,每组 2 个并存储他们的回答,以便我可以分析...

Global site tag (gtag.js) - Google Analytics