1. 程式人生 > >Oracle 降序索引

Oracle 降序索引

降序索引

    降序索引是8i裡面新出現的一種索引,是B*Tree的另一個衍生物,它的變化就是列在索引中的儲存方式從升序變成了降序,在某些場合下降序索引將會起作用。舉個例子,我們來查詢一張表並進行排序:

SQL> select * from test where a between 1 and 100 order by a desc,b asc;

    已選擇100行。

Execution Plan
----------------------------------------------------------
   0    SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=100 Bytes=400)
   1  0  SORT(ORDER BY)(Cost=2 Card=100 Bytes=400)
   2  1 INDEX (RANGE SCAN) OF 'IND_BT' (NON-UNIQUE) (Cost=2 Card=100 Bytes=400)

    這裡優化器首先選擇了一個索引範圍掃描,然後還有一個排序的步驟。如果使用了降序索引,排序的過程會被取消。

SQL> create index test.ind_desc on test.testrev(a desc,b asc);

    索引已建立。

SQL> analyze index test.ind_desc compute statistics;

    索引已分析

    再來看下執行路徑:

SQL> select * from test where a between 1 and 100 order by a desc,b asc;

    已選擇100行。

Execution Plan(SQL執行計劃,稍後會講解如何使用)。
----------------------------------------------------------
   0    SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=100 Bytes=400)

1  0 INDEX (RANGE SCAN) OF 'IND_DESC' (NON-UNIQUE) (Cost=2 Card=100 Bytes=400)

    我們看到排序過程消失了,這是因為建立降序索引時Oracle已經把資料都按降序排好了。

    另外一個需要注意的地方是要設定init.ora裡面的compatible引數為8.1.0或以上,否則建立時desc關鍵字將被忽略。

相關推薦

Oracle 索引

降序索引     降序索引是8i裡面新出現的一種索引,是B*Tree的另一個衍生物,它的變化就是列在索引中的儲存方式從升序變成了降序,在某些場合下降序索引將會起作用。舉個例子,我們來查詢一張表並進行排序: SQL> select * from test where a

關於Oracle索引的定意及回溯

降序索引本質上是FBI,其具體定義可以通過 user_ind_expressions 或dba_ind_expressions 查詢。那麼同樣的,降序索引只有在CBO下才能被使用。Connected to Oracle9i Enterprise Edition Release

Oracle 索 引 的 分 類 :索引和點陣圖索引

 降序索引     降序索引是8i裡面新出現的一種索引,是B*Tree的另一個衍生物,它的變化就是列在索引中的儲存方式從升序變成了降序,在某些場合下降序索引將會起作用。舉個例子,我們來查詢一張表並進行排序: SQL> select * from test where a

Oracle 程式設計藝術--索引讀書筆記

  1.11gr2資料庫的索引預設排序是asc,不是desc。       準備測試資料  create table test as select rownum as objectid,object_name from all_objects;       建立預設索

[20181124]關於索引問題2.txt

[20181124]關於降序索引問題2.txt--//連結:blog.itpub.net/267265/viewspace-2221425/,探討降序索引中索引的鍵值。--//實際上使用函式sys_op_descend.--//前面已經提到結尾加入FF,為了排序的需要。這樣導致chr(0),以及後續的chr(

[20181124]關於索引問題3.txt

[20181124]關於降序索引問題3.txt--//連結:blog.itpub.net/267265/viewspace-2221425/,探討降序索引中索引的鍵值。--//實際上使用函式sys_op_descend.--//連結:http://blog.itpub.net/267265/viewspace

mysql 8.0索引

MySQL支援降序索引:DESC在索引定義中不再被忽略,但會導致按鍵降序儲存鍵值。而且只有InnoDB儲存引擎支援降序索引例如:建立表CREATE TABLE test.t (id INT NOT NULL auto_increment PRIMARY KEY,c1 INT, c2 INT);插入資料INSE

索引的適用場景

Oracle預設的索引是升序的, 同時也支援降序索引. 一直沒想明白為什麼要支援降序索引,因為索引是用來查詢的,只要是排序後的查詢都是可以使用折半查詢的(使用平衡樹會更快些),根本不關心是升序還是降序排列. 查了多方資料也沒找到原因, 最近想到了一個可能的場景. 就是如果查詢結果是需要降序排列,這個時候排

MySQL 8 新特性之索引底層實現

什麼是降序索引 大家可能對索引比較熟悉,而對降序索引比較陌生,事實上降序索引是索引的子集。 我們通常使用下面的語句來建立一個索引:

oracle order by 排序之 null 排最後

1 表資料person_info id   name  age 1    qq       23 2    ee  &

Oracle之按工資查出表中第5到第10條的記錄的方法

1.找出emp表中第5到10條記錄並按降序排列 1.1   SELECT * FROM emp ORDER BY sal DESC; //查出表中所有資料並按降序排列 1.2   SELECT ROWNUM r,s.* FROM (SELECT * FROM emp OR

Oracle 子查詢,按排列,取前n條

比如,有一個student 表: id             student_name      1                                  s1 2                                  s2 03       

使用stackOfIntegers實現素數

number stack class pop pri ack == [] private 使用stackOfIntegers實現降序素數 代碼如下: package day06; public class TestSU { public static void main(

angularJS可以實現常常看到購物車中的升序效果

back adding pla pac doc 升序降序 tle 下標 sco { "xinxi":[ {"id":100,"name":"baobo","age":12}, {"id":99,"name":"paopo","age":18}, {

和升序 的區別,就在於這個

int console emp using lda con esp ++ 升序 原文發布時間為:2009-03-18 —— 來源於本人的百度文章 [由搬家工具導入]原理:升序和降

Tingq 模糊查詢 共多少條數據 最大、小、平均、求和值 升、

string sys post nat sender type asp idt acl 頁面代碼 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="

Oracle復合索引+空值的索引使用問題

圖片 .com 討論 bubuko dep spa tree not nbsp 昨天在QQ群裏討論一個SQL優化的問題,語句大致如下: select A,min(B) from table group by A;--A,B都沒有not null約束,A列無空值,B列有空值

Python list排序

doc -- pos light 參考 als sig pass 接收 test = [6,1,2,3,4,5] a = sorted(test,reverse=True) print a 結果如下: [6, 5, 4, 3, 2, 1] 你可以參考下sorted,裏面

python小練習:給定一個非空且為正整數的列表 按重復次數 排列輸出

class 數字 轉換成 原來 小練習 顯示 python index 去重 假設有個列表 a=[1,1,1,2,2,4,5,5,5,5] (非空且為正整數) 那麽根據要求 最終輸出的形式為 5,1,2,4 (按重復次數 降序排列輸出) 代碼實現及解釋: a=[1

排列

message 姓名 edi pos ati str new dia += public static void main(String[]aaa){ String [] name = new String[5]; int [] sala