排序的迷惑
create table cust
( cust_id number(10),
cust_name varchar2(50)
)
;
insert into cust values(1 ,'aaa');
insert into cust values(2 ,'bbb');
insert into cust values(3 ,'ccc');
insert into cust values(4 ,'ddd');
insert into cust values(5 ,'eee');
====
SQL> select * from (
2 SELECT cust_name,MAX(cust_id) OVER ( order by cust_id desc ) cc
3 FROM cust) where rownum=1
4 /
CUST_NAME CC
------------------ ----------
eee 5
SQL> select cust_name from (
2 SELECT cust_name,MAX(cust_id) OVER ( order by cust_id desc ) cc
3 FROM cust) where rownum=1
4 /
CUST_NAME
------------------
aaa
迷惑,為什麼結果不一樣?
SQL> set autotrace on
SQL> select * from (
2 SELECT cust_name,MAX(cust_id) OVER ( order by cust_id desc ) cc
3 FROM cust)
4 /
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 VIEW
2 1 WINDOW (SORT)
3 2 TABLE ACCESS (FULL) OF 'CUST'
SQL> select cust_name from (
2 SELECT cust_name,MAX(cust_id) OVER ( order by cust_id desc ) cc
3 FROM cust)
4 /
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 VIEW
2 1 TABLE ACCESS (FULL) OF 'CUST'
原因自然是由於執行計劃的不同,但是為什麼會導致執行計劃的不同,我只能認為,當你沒有訪問那個要排序的列的時候,oracle很聰明的識別出來了,然後內部做處理了,導致資料沒有按照你想象的去排序。
其實用:
SQL> select cust_name from (
2 SELECT cust_name,cust_id
3 FROM cust order by cust_id desc)
4 /
CUST_NAME
--------------------------------------------------
eee
ddd
ccc
bbb
aaa
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 VIEW
2 1 SORT (ORDER BY)
3 2 TABLE ACCESS (FULL) OF 'CUST'
就可以了,為啥要那麼複雜呢。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133835/viewspace-929885/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 負載均衡的迷惑負載
- Python 迷惑點Python
- 迷惑的地方!請高手指導
- 關於用設計模式代替if else的迷惑設計模式
- 不再迷惑,無值和 NULL 值Null
- 【C++】 68_拾遺: 令人迷惑的寫法C++
- TypeScript 中令人迷惑的物件型別:Object、{} 和 objectTypeScript物件型別Object
- React內部讓人迷惑的效能優化策略React優化
- GCD 容易讓人迷惑的幾個小問題GC
- 一系列問題的迷惑????企高手解析????????
- 請jdon兄弟解惑啊。......關於jsf的迷惑JS
- 斐波那契查詢不再迷惑
- 企業AI迷惑行為大賞AI
- [譯] 別再對 Angular Modules 感到迷惑Angular
- 開發祕籍——單元測試的迷惑與思考
- 2020年遊戲迷惑新聞遊戲
- koa-router讓人迷惑的文件和原始碼實現原始碼
- TiDB故障處理之讓人迷惑的Region is UnavailableTiDBAI
- J2EE 與 多資料庫的支援(迷惑中。。)資料庫
- 6. 二十不惑,ObjectMapper使用也不再迷惑ObjectAPP
- Go基礎:phper初學可能會有的迷惑GoPHP
- 實在迷惑了,struts究竟怎麼安裝?
- [譯] 別再對 Angular 表單的 ControlValueAccessor 感到迷惑Angular
- 誰說不能用Python寫出讓人迷惑的程式碼?Python
- O(lgn)的三種排序,快速排序、歸併排序、堆排序排序
- 計數排序的原址排序排序
- 迷惑,求解--ORM實體於領域實體之間的關係ORM
- 不要用物件導向來迷惑程式設計師新手物件程式設計師
- 關於js陣列的六種演算法---水桶排序,氣泡排序,選擇排序,快速排序,插入排序,希爾排序的理解。JS陣列演算法排序
- 「1024」專屬序猿的快樂,驚奇迷惑程式碼大賞
- 加入設計模式後事務遇到的迷惑,還請各位大哥解難設計模式
- 不要被假象迷惑 重啟是解決問題的一個有效方法
- Python八大演算法的實現,插入排序、希爾排序、氣泡排序、快速排序、直接選擇排序、堆排序、歸併排序、基數排序。Python演算法排序
- 經常提及的幾個js排序方法(氣泡排序、選擇排序、計數排序)JS排序
- 特殊的排序排序
- 排序:氣泡排序&快速排序排序
- 基於桶的排序之基數排序以及排序方法總結排序
- 【排序】插入類排序—(折半)插入排序、希爾排序排序