仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 856|回复: 9
打印 上一主题 下一主题

[学习教程] MYSQL教程之会商: SELECT TOP N成绩 (2)

[复制链接]
逍遥一派 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:35:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
据我的观察,现在有一个趋势,那些经过正式培训的数据库管理员DBA更倾向于选择一个专有关系数据库,例如Oracle。对于一些具有专门数据库管理员的比较大的环境来说,MySQL很难得到宠爱,这时候,关于MySQL是否真的具有良好的可扩展性的争论已经没有意义。select|成绩Hi,everyone:

明天持续会商SELECTTOPN成绩.
1.DB2的M2
在前一篇会商中提到,因为DB2的SUBQUERY不撑持ORDERBY子句,因而没法机关M2.实践上,DB2供应了一组新的函数,称为OLAPFUNCTIONS,能够很好的撑持TOPN成绩.
M2:
SELECT*FROM
(SELECTMYKEY,RANK()OVER(ORDERBYORD_COLDESC)ASMYRANK
FROMMYTABLE)ASRANKED_TABLE
WHEREMYRANK<=N

使用OLAP函数,除上一篇中所提办法,DB2的M1又能够暗示为:
SELECT*FROM
(SELECTMYKEY,ROW_NUMBER()OVER(ORDERBYORD_COLDESC)ASMYRANK
FROMMYTABLE)ASRANKED_TABLE
WHEREMYRANK<=N

2.除M1,M2两种TOPN外,另有一种被DB2称为DENSE_RANK,(M3).经由过程下例分离申明.
M1:TOP3--1(4,101),2(5,101),3(1,100)大概1(4,101),2(5,101),3(2,100)
M2:TOP3--1(4,101),1(5,101),3(1,100),3(2,100)
M3:TOP3--1(4,101),1(5,101),2(1,100),2(2,100),3(3,99)
在DB2中,M3云云完成:
SELECT*FROM
(SELECTMYKEY,DENSE_RANK()OVER(ORDERBYORD_COLDESC)ASMYRANK
FROMMYTABLE)ASRANKED_TABLE
WHEREMYRANK<=N

3.为制止DBMSs的方言成绩,M2,M3能够有以下尺度(SQL92)暗示:
M2:
SELECT*FROMMYTABLEM1WHEREN>
(SELECTCOUNT(*)FROMMYTABLEM2
WHEREM2.ORD_COL>M1.ORD_COL);
注重:两个对照符都是>
M3:
SELECT*FROMMYTABLEM1WHEREN>
(SELECTCOUNT(DISTINCTM2.ORD_COL)FROMMYTABLEM2
WHEREM2.ORD_COL>M1.ORD_COL);
注重:与M2的分歧在于DISTINCT的利用
至于M1,我今朝还没有想到符合的尺度写法,请增补.

4.关于MYSQL
相对各支流RDBMS来讲,MYSQL要复杂,稚嫩地多.在运转MYSQL时发明竟然不撑持SUBQUERY.因而MYSQL中的TOPN成绩要庞大一些.
SELECT*FROMMYTABLE,MYTABLEM2
WHEREM2.ORD_COL>=M1.ORD_COL
GROUPBYM1.MYKEY
HAVINGCOUNT(M2.ORD_COL)<=N
可是,这个语句是有成绩的.一个极度的例子:当一切的ORD_COL的数值都一样时.假如哪位想到了怎样办理这个成绩,请增补.

----------------------------------------------------------------------------------
各语句已测试过,EXAMPLE:
createtablemytable(mykeyint,ord_colint);
insertintomytablevalues(1,100);
insertintomytablevalues(2,100);
insertintomytablevalues(3,99);
insertintomytablevalues(4,101);
insertintomytablevalues(5,101);

fang6/26/2000
“通过有能力的DBA的一个简单计划,MySQL可以达到令人难以想像的运行速度,”一位资深DBA如此表示。MySQL中没有多余的功能来拖累CPU或占用内存。
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-1-19 17:53:37 来自手机 | 只看该作者
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
分手快乐 该用户已被删除
板凳
发表于 2015-1-19 17:53:37 | 只看该作者
无法深入到数据库系统层面去了解和探究
逍遥一派 该用户已被删除
地板
 楼主| 发表于 2015-1-25 23:34:20 | 只看该作者
比如,MicrosoftSQLServer2008的某一个版本可以满足现在的这个业务的需要,而且价格还比Oracle11g要便宜,那么这一产品就是适合的。
莫相离 该用户已被删除
5#
发表于 2015-2-4 13:23:26 | 只看该作者
记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
乐观 该用户已被删除
6#
发表于 2015-2-9 23:38:55 | 只看该作者
以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
兰色精灵 该用户已被删除
7#
发表于 2015-2-28 08:44:34 | 只看该作者
对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。
深爱那片海 该用户已被删除
8#
发表于 2015-3-9 21:41:54 | 只看该作者
你可以简单地认为适合的就是好,不适合就是不好。
冷月葬花魂 该用户已被删除
9#
发表于 2015-3-17 01:45:06 | 只看该作者
作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
小女巫 该用户已被删除
10#
发表于 2015-3-23 15:10:30 | 只看该作者
入门没那么困难,精通没那么容易
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-11 20:58

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表