马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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或占用内存。 |