日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL 语句技巧--排名函数的使用实例

發(fā)布時間:2025/3/8 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL 语句技巧--排名函数的使用实例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?? 今天看到一篇文章,關(guān)于討論如何優(yōu)化語句,原文如下:

?????? 作者總結(jié)貼: http://blog.csdn.net/wangd1121/archive/2008/06/23/2579435.aspx

???????網(wǎng)友討論貼:?http://topic.csdn.net/u/20080504/14/5c5866c3-8b91-45ef-ab17-f994f88f8e42.html?

?

?? 問題描述:

比如,假設(shè)我們有下面這樣結(jié)構(gòu)的一張表,這張表的數(shù)據(jù)量非常巨大。
CREATE?TABLE?table1(
????
[ID]?[bigint]?IDENTITY(1,1)?NOT?NULL,
????
[Name]?[nvarchar](128)?NOT?NULL,
????
[class]?int?not?null,
????
[date]?datetime?not?null
)
??class表示分類編號。?分類數(shù)不固定,至少有上千種分類,date?表示該條記錄被更新的時間?

? 要求: 我們現(xiàn)在想獲得每個分類最新被更新的5條記錄。

?

?? 解決的SQL語句:

select?id,name,class,date?from(
select?id,name,class,date?,row_number()?over(partition?by?class?order?by?date?desc)
as?rowindex?from?table1)?a
where?rowindex?<=?5

?

?? 的確是一個很好的解決辦法。

????? 注意:OVER 子句中的 PARTITION BY 將結(jié)果集分為多個分區(qū),這里的partition by class是按照類型分區(qū),當(dāng)然是有多少個類型分多少個區(qū)。

?

??? 當(dāng)然作者討論沒有涉及到后續(xù)的性能優(yōu)化討論,因為表的數(shù)據(jù)量比較大情況下,如何優(yōu)化該查詢。如果不建立任何索引和處理,以上的執(zhí)行語句是全表掃描,速度很慢的。

?? 由于沒有上面的數(shù)據(jù)量,我們從另一個表中模擬這個實現(xiàn):

??? 表[zping.com]大約有數(shù)據(jù)70多萬數(shù)據(jù),有字段id,operator,operatedate,remark等字段信息,其中operator有兩三百個不同值,和上面的執(zhí)行意義一樣:

select?*?from?
(
select?operator?,?operatedate,row_number()?over?
(partition?
by?operator?order?by?operatedate?)?rn?
from??dbo.[zping.com]
)?t
where?rn<=5

?

? 如果沒有建立索引,上述查詢速度很慢,這時要如果在operator和operatedate分別建立索引也很慢,建立(operatedate,operator)索引也比較慢,因為要排序,這時建立復(fù)合索引(operator,operatedate).

??

???

轉(zhuǎn)載于:https://www.cnblogs.com/zping/archive/2008/09/25/1281832.html

總結(jié)

以上是生活随笔為你收集整理的SQL 语句技巧--排名函数的使用实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。