一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四

聯(lián)系我們 - 廣告服務(wù) - 聯(lián)系電話:
您的當(dāng)前位置: > 關(guān)注 > > 正文

為什么ROWNUM永遠(yuǎn)都不要使用?ROWNUM值是何時(shí)被分配的?

來(lái)源:CSDN 時(shí)間:2023-02-28 10:17:51


(資料圖片僅供參考)

ROWNUM的概念ROWNUM是一個(gè)虛假的列。它將被分配為 1,2,3,4,...N,N 是行的數(shù)量。一個(gè)ROWNUM值不是被永久的分配給一行 (這是最容易被誤解的)。表中的某一行并沒有標(biāo)號(hào);你不可以查詢ROWNUM值為5的行——根本沒有這個(gè)概念。另一個(gè)容易搞糊涂的問(wèn)題是ROWNUM值是何時(shí)被分配的。ROWNUM值的分配是在查詢的謂詞解析之后,任何排序和聚合之前進(jìn)行的。ROWNUM值只有當(dāng)被分配之后才會(huì)增長(zhǎng)。這就是為什么下面的查詢永遠(yuǎn)都不會(huì)返回結(jié)果: select * from countries where rownum>1; ROWNUM > 1對(duì)于第一行來(lái)說(shuō)并不是真值,ROWNUM沒有增長(zhǎng)到 2。所以,沒有比1大的ROWNUM.永遠(yuǎn)都不要使用’ROWNUM>?‘和’ROWNUM=2…N’這樣的條件。 用rownum顯示排序結(jié)果的前N條記錄FROM/WHERE子句先被執(zhí)行. 根據(jù)FROM/WHERE子句輸出的行, ROWNUM被分配給他們并自增長(zhǎng). SELECT 被應(yīng)用. GROUP BY 被應(yīng)用. HAVING is 被應(yīng)用. ORDER BY 被應(yīng)用. 這就是為什么下面的SQL幾乎總是錯(cuò)誤的: select rownum,job_title,min_salary from jobs where rownum<3 order by min_salary; 正確的寫法:         select rownum,tmp.* from (         select job_title,min_salary         from jobs order by min_salary) tmp         where rownum<=3; 用ROWNUM實(shí)現(xiàn)分頁(yè)select * from         (select /*+ FIRST_ROWS(n) */ a.*,         ROWNUM rnum         from (your_query_goes_here, with order by) a         where ROWNUM <=         :MAX_ROW_TO_FETCH ) where rnum >= :MIN_ROW_TO_FETCH; FIRST_ROWS(N)使優(yōu)化器考慮最短時(shí)間獲得前N條記錄. :MAX_ROW_TO_FETCH 某一頁(yè)中結(jié)果集的最后一行。如果你每頁(yè)顯示10行,要顯示第6頁(yè),那么此值取60。 :MIN_ROW_TO_FETCH 某一頁(yè)中結(jié)果集的第一行。如果你每頁(yè)顯示10行,要顯示第6頁(yè),那么此值取50。

ROWNUM對(duì)性能的影響 ROWNUM可以避免oracle在磁盤上進(jìn)行排序。rownum無(wú)法避免全表掃描的發(fā)生,但是它可以避免對(duì)整個(gè)表數(shù)據(jù)的排序操作,在指定了rownum后,排序操作在內(nèi)存中可以輕松完成。

責(zé)任編輯:

標(biāo)簽:

相關(guān)推薦:

精彩放送:

新聞聚焦
Top 主站蜘蛛池模板: 双牌县| 郎溪县| 神木县| 搜索| 贞丰县| 施秉县| 新邵县| 甘肃省| 道孚县| 辽宁省| 邻水| 安新县| 嘉荫县| 当雄县| 南通市| 竹溪县| 鸡西市| 邹平县| 冕宁县| 永新县| 乐业县| 揭阳市| 申扎县| 原阳县| 富锦市| 罗江县| 红安县| 承德市| 济南市| 松原市| 英德市| 辛集市| 镇雄县| 文昌市| 武山县| 六枝特区| 阿城市| 汉川市| 临桂县| 彭泽县| 晋宁县|