国产探花免费观看_亚洲丰满少妇自慰呻吟_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.任何指定的數據列都有眾多的內置函數可用,因此更有可能的情況是:會存在完全匹配查詢的索引。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 利川市| 大英县| 贡嘎县| 茂名市| 马关县| 舒城县| 九寨沟县| 舟曲县| 土默特左旗| 新邵县| 徐汇区| 久治县| 比如县| 仙游县| 古浪县| 兰西县| 宁都县| 资阳市| 东山县| 阿坝县| 乐昌市| 定日县| 沙洋县| 建瓯市| 海城市| 长治市| 玉门市| 景宁| 德格县| 巨野县| 方正县| 阿拉尔市| 库尔勒市| 龙川县| 澳门| 乐平市| 合阳县| 泾阳县| 盐池县| 陇西县| 保山市|