理解oracle索引掃描類型的特點(diǎn)以及具體觸發(fā)的條件,對于通過合理地使用索引,進(jìn)行sql優(yōu)化至關(guān)重要(例如組合索引的引導(dǎo)列的選擇問題)。

在總結(jié)索引掃描類型前,需要再次強(qiáng)調(diào)關(guān)于索引特點(diǎn)的幾個(gè)關(guān)鍵點(diǎn):

  • 對于單一列建立的索引,既單一列索引,b-tree中不保存索引列的null值信息
  • 對于多個(gè)列建立的索引,既組合列索引,b-tree中會(huì)連同其他非null值列,保留該列null值記錄;對于一條記錄中,組合索引全部列都是null值,組合索引中不會(huì)記錄(從之前的實(shí)驗(yàn)看,此時(shí)的執(zhí)行計(jì)劃是全表掃描)
  • 創(chuàng)建主鍵約束以及唯一鍵約束,或自動(dòng)創(chuàng)建唯一索引
  • create index創(chuàng)建的索引屬于普通索引(非唯一索引)
  • create unique index創(chuàng)建的索引屬于唯一索引

其他的一些特點(diǎn),可參閱前面的幾篇總結(jié)。

此外,為避免概念的混淆,再次說明一下:“索引類型”主要探討的是索引的幾種類別的問題,而“索引掃描類型”主要探討的是索引掃描的幾種具體實(shí)現(xiàn)方法的問題。

 

 

1、索引掃描類型概述

Oracle提供了五種索引掃描類型,根據(jù)具體索引類型、數(shù)據(jù)分布、約束條件以及where限制的不同進(jìn)行選擇: 

  • 索引唯一掃描(index unique scan)
  • 索引范圍掃描(index range scan)
  • 索引跳躍掃描(index skip scan)
  • 索引全掃描(index full scan)
  • 索引快速掃描(index fast full scan)

 

 

2、索引唯一掃描(index unique scan) 

索引唯一掃描,僅僅針對唯一索引的掃描,且僅適