關於btree索引不能正常使用問題

2021-05-25 07:03:41 字數 1294 閱讀 1075

select count(1) from internet_act t  這個sql查下來居然不會使用internet_act_indx_1

select statement, goal = choose   cost=7796 cardinality=6619756 bytes=40870373544

table access full object owner=ucloodev object name=internet_act cost=7796 cardinality=6619756 bytes=40870373544

除非後面使用where *** < ***

查原因發現如下

由於b*tree索引不儲存null值,所以在索引字段允許為空的情況下,某些oracle查詢不會使用索引.

很多時候,我們看似可以使用全索引掃瞄(full index scan)的情況,可能oracle就會因為null值的存在而放棄索引.

在此情況下即使使用hints,oracle也不會使用索引,其根本原因就是因為null值的存在.

當索引字段允許為null時,oracle放棄此索引

當該字段為not null時,索引可以被強制使用

以下為網上查來的資料

posted by: eygle

at february 23, 2006 09:48 am

ref:"由於b*tree索引不儲存null值,所以在索引字段允許為空的情況下,oracle查詢不會使用索引."

這種情況只影響強制使用索引hints而又無此字段的where條件時,當select語句中的where條件包含此字段的expression時一樣可以使用此索引!

反之,按本文的說法,我們豈不是只能在非空字段上建索引了?!事實是我們可以在我們任意想要建索引的字段上建索引,只要你認為必要,無需關注其是否not null!

不同的是,is null條件是當然是不查b*tree索引的,bitmap索引則可以。

posted by: xsb

at february 28, 2006 10:28 am

ref:"由於b*tree索引不儲存null值,所以在索引字段允許為空的情況下,oracle查詢不會使用索引."

這種情況只影響強制使用索引hints而又無此字段的where條件時,當select語句中的where條件包含此字段的expression時一樣可以使用此索引!

反之,按本文的說法,我們豈不是只能在非空字段上建索引了?!事實是我們可以在我們任意想要建索引的字段上建索引,只要你認為必要,無需關注其是否not null!

不同的是,is null條件當然是不查b*tree索引的,bitmap索引則可以。

關於BIEE不能正常啟動

網路連線不上 1.lsnrctl不能正常啟動 1.那些需要修改 etc hosts 和 etc sysconfig network 修改當前ip位址的hostname 並且保持和etc sysconfig network一致 需要重啟重新整理hostname 當然也可以用命令 2.修改oracle ...

CentOs yum不能正常使用的問題

執行yum y install 報錯error cannot retrieve metalink for repository epel.please verify its path and try again 1,修改 etc yum.repos.d epel.repo注釋metalink映象恢復...

使用crontab不能正常執行的問題

crontab l 列出當前使用者的crontab列表 crontab e 以vi開啟crontab檔案,可以進行編輯。如果需要加新的自啟動專案,可以在此進行新增後再輸入 wq 儲存。crontab.xgoo5mx 25l,1611c written crontab installing new c...