国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

在9i里對基于函數的索引進行僅索引掃描

2024-07-21 02:33:28
字體:
來源:轉載
供稿:網友

  Oracle8i里的僅索引(index-only)執行計劃在Oracle9i里得到了加強,所以現在能夠提供對基于函數的索引(function-based index,FBI)的支持。Oracle的索引組織表(index-organized table,IOT)是一個很好的例子,能夠說明Oracle如何在可能的時候忽略對表格的訪問。 簡而言之,每當Oracle SQL優化器檢測到它能夠為查詢提供服務,而不需要觸及表格行的時候,Oracle就會調用一個完整的索引掃描,快速讀取索引的每個塊,而不需要觸及表格本身。
  
  完整索引執行計劃要比訪問表格更快,其原因有兩個:
  
  1.DB_FILE_MULTIBLOCK_READ_COUNT會被調用,以便更快地預先取回索引塊。
  2.完整索引掃描能夠使用Oracle的平行查詢。
  在Oracle9i之前的版本里,只有在索引被創建而且不帶有任何NULL值的時候,僅索引掃描才可能被使用。FBI是Oracle8的一個福音,它們事實上能夠消除任何不必要的完整表格掃描。由于FBI能夠精確地復制查詢的WHERE子句里的任何數據列,所以它們一般都被用來確保索引正在服務查詢。
  
  為了說明完全索引掃描如何同FBI一起工作,現在讓我們來看下面這個關于學生的簡單表格:
  
  create table
    student
  (
    student_name,
    date_of_birth
  );
  
  利用這個表格,我們在表格所有的數據列上創建了一個已連接的FBI:
  
  create index
    whole_student
  on
    student
  (
    initcap(student_name),
    to_char(date_of_birth,'MM-DD-YY')
  );
  
  Oracle9i知道,參照SQL陳述式里這些數據列的任何查詢都能夠使用完整索引掃描:
  
  select * from student
  where
    initcap(student_name) = 'Jones';
  
  select * from student
  where
    to_char(date_of_birth,'MM-DD=YY') = '04-07-85';
  
  那么,什么時候Oracle會選擇完整索引掃描呢?實際上,完整索引掃描是非常少見的,其原因有兩個:
  
  1.Oracle9i會要求WHERE子句里的所有判定述詞(PRedicate)都匹配索引里的這些數據列。
  2.任何指定的數據列都有眾多的內置函數可用,因此更有可能的情況是:會存在完全匹配查詢的索引。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浪卡子县| 蒙阴县| 砀山县| 延津县| 四子王旗| 虞城县| 太湖县| 濉溪县| 南宫市| 金乡县| 南康市| 普陀区| 堆龙德庆县| 巴林右旗| 文登市| 如皋市| 宣恩县| 小金县| 重庆市| 大姚县| 枞阳县| 无极县| 天峨县| 通州市| 大新县| 郁南县| 徐闻县| 栾城县| 石城县| 新建县| 寿宁县| 富裕县| 四子王旗| 开原市| 乌鲁木齐县| 惠来县| 嘉定区| 德安县| 信丰县| 通城县| 华池县|